Robust system for transmitting and receiving map data

ABSTRACT

Frames comprise odd fields and even fields. The frame sync segments of the odd fields contains a current map specifying the location of data in frames, a next map specifying the location of data in a future frame, and a frame count designating the future frame. The frame sync segments of the even field may contain the same information. Alternatively, the frame sync segments of the odd fields contain the current map and part of the frame count, and the frame sync segments of the corresponding even fields contain the next map and the rest of the frame count. A receiver uses the map and frame count information to find data in the fields of received frames.

RELATED APPLICATIONS

This application is a continuation of Ser. No. 10/368,737 filed on Feb. 18, 2003 which is a continuation-in-part of U.S. application Ser. No. 10/345,609 filed Jan. 16, 2003, now abandoned, which is a continuation-in-part of U.S. application Ser. No 10/282,394 filed Oct. 29, 2002, is an U.S. Pat. No. 6,806,816, which is a continuation-in-part of U.S. application Ser. No. 10/011,333 filed Dec. 3, 2001, is an U.S. Pat. No. 6,563,436, which claims the benefit of U.S. Provisional Application No. 60/324,096 filed on Sep. 22, 2001. U.S. application Ser. No. 09/804,262 contains disclosure similar in part to disclosure of this application.

TECHNICAL FIELD OF THE INVENTION

The present invention relates to the coding and decoding of data, such as map data that indicate the distribution of first and second data segments in a transmitted data field.

BACKGROUND OF THE INVENTION

The ATSC digital television standard presently provides for the transmission of successive data fields each comprising 313 segments extending over a 24.2 ms time interval. FIG. 1 discloses an exemplary format for a data field according to this standard. The first segment of each field is a field sync segment. The field sync segment is composed of four two-level segment sync symbols and space for 828 other two-level symbols. A portion of this space is used for a field sync, and another portion of this field is reserved. Except for the reserved portion, the information in the frame sync segment does not change from field to field. Each of the remaining segments of each field comprises four two-level segment sync symbols and 828 n-level data symbols where n is currently eight, although n could be other integers such as two, four, sixteen, etc. Except for the segment sync portion, it is highly likely that the data in the remaining segments of the fields change from field to field.

As indicated by U.S. patent application Ser. No. 09/804,262 filed on Mar. 13, 2001, there is presently some interest in extending the ATSC digital television standard to allow a field to contain a mix of more robustly coded data (referred to herein as E-VSB data) and the data currently provided for in the standard (referred to herein as VSB data). Preferably, the data mix is employed on a segment-by-segment basis such that some segments of a field are used to transmit VSB data exclusively and the remaining segments of the field are used to transmit E-VSB segments exclusively. However, it is possible that all data segments of a field could contain either E-VSB data segments exclusively or VSB data segments exclusively. Moreover, it is also possible that the E-VSB data contained in some segments of a field may be coded with one robust coding rate and that the E-VSB data in other segments of the field may be coded at other robust coding rates.

As disclosed in the above mentioned '262 application, a map that indicates which segments contain the more robust (E-VSB) data and which segments contain standard VSB data is preferably provided by the transmitter to the receiver so that the receiver can properly decode and otherwise process the received VSB and E-VSB data. Assuming that a field contains E-VSB data at different coding rates, the map in that case must also designate the coding rates that apply to the differently coded E-VSB data segments.

The '262 application describes one mapping system. Co-pending U.S. patent application Ser. No. 10/011,900 filed Dec. 3, 2001 as well as the '333 application describe another mapping system that reliably identifies which segments contain first data (such as VSB data) and which segments contain second data (such as E-VSB data).

Multipath distortion, commonly found on terrestrial television channels, can affect the ability of the receiver to properly receive and process the map. For example, in the case of map data transmitted in the reserved portion of the field sync segment, data that tends to be random from field to field will be superimposed on the map data if a ghost is a long ghost such that it occurs in the data of a data segment rather than in the field sync segment. If the map and its duplicate are transmitted in two successive field sync segments, the map and its duplicate add with a high degree of correlation when a map and its duplicate are averaged in a receiver, but the superimposed data add with a much lower degree of correlation. Thus, the map is more easily distinguished from the data. Accordingly, the map is readily detectable.

On the other hand, if the ghost is a short ghost such that it occurs in the frame sync segment of a field, frame sync symbols that may not vary from field to field are superimposed on both the map and the duplicate. Accordingly, while the map and its duplicate add with a high degree of correlation, the superimposed field sync symbols also add with a high degree of correlation. Thus, the map cannot be easily distinguished from the field sync symbols. Accordingly, the map is difficult to detect.

As indicated in the aforementioned '394 application, interleaving is used to minimize the adverse effects of burst noise. However, as discussed more fully below, there is a latency that is inherent from the interleaving of the map that is used to indicate where in a frame the receiver can find the various data. This latency results because any one map, due to the interleaving, is spread out over a number of frames so that the map cannot be completely received until all of the frames over which it is spread are received. As a result, the latency associated with interleaving significantly increases receiver acquisition time.

Moreover, while interleaving generally protects against a noise burst impairing all of the map bits or symbols in a particular field, the effectiveness of such protection is reduced in the event of multiple noise bursts in that or subsequent fields. Repeated noise bursts could prevent effective reception of the map even though the robust and other data in the frame are received without appreciable degradation.

The present invention, in one of its embodiments, allows maps to be more easily detected even in the presence of noise bursts.

SUMMARY OF THE INVENTION

In accordance with one aspect of the present invention, a data receiving method comprises the following: receiving fields having a field sync segment and a plurality of data segments, wherein the field sync segments contain map and count information, wherein the map information designates locations of first and second data segments containing respective first and second data in the fields, and wherein the count information indicates a subsequent field in which the map information changes; processing the map information to produce map outputs; and, locating the first and second data segments according to the map outputs.

In accordance with another aspect of the present invention, a data receiving method comprises the following: receiving frames having frame sync segments and data segments, wherein each of the frame sync segments contains map and count information, wherein the map information designates locations of first and second data segments containing respective first and second data in the frames, and wherein the count information indicates a subsequent frame in which the map information changes, and wherein the map and count information is encoded; decoding the map and count information; storing the decoded map and count information in a memory; and, locating the first and second data segments in received frames according to the decoded map information.

In accordance with yet another aspect of the present invention, a data transmitting method comprises the following: inserting map and count information into field sync segments of fields also containing data segments, wherein the map information designates locations of first and second data segments containing respective first and second data in the fields, and wherein the count information indicates a subsequent field in which the map information changes; inserting the first and second data in the respective first and second data segments as designated by the map information; and, transmitting the fields.

In accordance with still another aspect of the present invention, a data receiving method comprises the following: receiving current and next maps in corresponding fields of an ATSC compliant signal, wherein the current map indicates location of data in a current field and the next map indicates location of data in subsequent field; inverting only one of the current and next maps; combining the inverted one of the current and next maps and the non-inverted other of the current and next maps; and, determining map information from the combined maps.

In accordance with a further aspect of the present invention, a data transmitting method comprises the following: inverting only one of a current map and a next map, wherein the current map indicates location of data in a current field and the next map indicates location of data in subsequent field; inserting the non-inverted one of the current map and the next map and the inverted one of the current map and the next map into corresponding fields; and, transmitting the fields.

BRIEF DESCRIPTION OF THE DRAWINGS

These and other features and advantages of the present invention will become more apparent from a detailed consideration of the invention when taken in conjunction with the drawings in which:

FIG. 1 is a diagram illustrating an exemplary format of a field as defined in the ATSC digital television standard;

FIG. 2 is a schematic diagram of a map insertion system that inserts a map into fields to be transmitted;

FIG. 3 shows an example of a convolutional interleaver that can be used in the map insertion system shown in FIG. 2;

FIG. 4 is a schematic diagram of a portion of a receiver involved in de-formatting a received field based upon a received map;

FIG. 5 shows an example of a convolutional de-interleaver that can be used in the receiver portion shown in FIG. 4;

FIG. 6 shows a first embodiment of a Kerdock encoder that can be used in the map insertion system shown in FIG. 2;

FIG. 7 shows a second embodiment of a Kerdock encoder that can be used in the map insertion system shown in FIG. 2;

FIG. 8 shows a first embodiment of a Kerdock decoder that can be used in the receiver portion shown in FIG. 4;

FIG. 9 shows a second embodiment of a Kerdock decoder that can be used in the receiver portion shown in FIG. 4;

FIG. 10 shows a third embodiment of a Kerdock decoder that can be used in the receiver portion shown in FIG. 4;

FIGS. 11A and 11B are flow charts illustrating the operation of the receiver portion shown in FIG. 4;

FIGS. 12 and 13 are corresponding schematic diagrams of an alternative map insertion system and an alternative receiver that permit maps to be detected even in the presence of short static ghosts;

FIGS. 14 and 15 are corresponding schematic diagrams of another alternative map insertion system and another alternative receiver that permit maps to be detected;

FIG. 16 shows a 64/12 embodiment of a Kerdock encoder that can be used in the map insertion system shown in FIG. 14;

FIG. 17 shows a 64/12 embodiment of a Kerdock decoder that can be used in the receiver portion shown in FIG. 15;

FIG. 18 shows another 64/12 embodiment of a Kerdock encoder that can be used in the map insertion system shown in FIG. 14; and,

FIG. 19 shows another 64/12 embodiment of a Kerdock decoder that can be used in the receiver portion shown in FIG. 15.

DETAILED DESCRIPTION

In order to indicate which segments of a field contain VSB data and which segments of a field contain E-VSB data, a twelve bit map data unit (mdu) is defined for each data field. Accordingly, the map data unit is capable of designating one of 4096 possible combinations of VSB and E-VSB data segments for a respective field. The map data unit for an odd ATSC transmitted field may be denoted as {A₀ B₀ C₀}, and the map data unit for the next succeeding even ATSC transmitted field may be denoted as {A_(e) B_(e) C_(e)}, where A₀, B₀, C₀, A_(e), B_(e), and C_(e) each comprises four bits and is referred to herein as a map data sub-unit. Thus, each map data unit comprises twelve bits and two map data units for successive odd and even fields comprise twenty-four bits.

As shown in FIG. 2, a controller 10 generates sequence of map data units for application to a Kerdock encoder 12. Kerdock encoders that may be used for the Kerdock encoder 12 are disclosed below. Eight bits at a time are supplied to the Kerdock encoder 12. Thus, the first eight bits supplied to the Kerdock encoder 12 correspond to map data sub-units A₀ B₀, the next eight bits supplied to the Kerdock encoder 12 correspond to map data sub-units C₀ A_(e), and the next eight bits supplied to the Kerdock encoder 12 correspond to map data sub-units B_(e) C_(e). The map data units for succeeding fields are applied to the Kerdock encoder 12 in a like fashion.

For each eight bit input, the Kerdock encoder 12 produces a sixteen bit code word or vector that consists of the eight input bits and eight parity bits P_(x). Accordingly, for input map data sub-units A₀ B₀, the output of the Kerdock encoder 12 is a code word or vector {A₀ B₀ P₁}; for map data sub-units C₀ A_(e), the output of the Kerdock encoder 12 is {C₀ Ae P₂}; and, for map data sub-units B_(e) C_(e), the output of the Kerdock encoder 12 is {B_(e) C_(e) P₃}. Thus, three map data sub-units covering successive odd and even fields n and n+1 are thereby encoded into three sixteen bit output vectors containing forty-eight bits in all.

The code vectors that are produced by the Kerdock encoder 12 are processed by a convolutional interleaver 14 in order to provide protection from burst noise. Convolutional interleavers and de-interleavers are described in the ATSC digital television standard. An interleaver that may be used for the convolutional interleaver 14 is disclosed in U.S. Pat. No. 5,572,532. The convolutional interleaver 14 is preferably characterized by the parameters N=48, B=16 and M=3, where N is M times the block size (16 data elements) corresponding to three encoded map vectors produced by the Kerdock encoder 12, B is the interleave depth, and M is the delay unit size of the interleaver. Thus, the convolutional interleaver 14 delays the individual bits of the forty-eight bits of each block of three code vectors by 0, 3, 6, . . . , 45 bits at the output of the convolutional interleaver 14.

The convolutional interleaver 14 is preferably synchronized to the ATSC field sync signal that is generated by the controller 10 so that the successive delays on the input bits are reset at the end of each field. Accordingly, each field begins with zero delay. As will be explained in further detail hereinafter, each set of forty-eight interleaved bits of the blocks of three code vectors are duplicated for transmission as two level symbols in the reserved portion of two consecutive field sync segments. It will be appreciated that this Kerdock coding and duplication results in an effective coding rate of ¼ because the map bits are doubled in number by the Kerdock encoder 12 and are doubled in number again by the duplication, so that twenty-four bits representing two map data units are coded into ninety-six bits in two field sync segments.

It will also be appreciated that, considering the corresponding de-interleaver in the receiver, a latency interval L must be accounted for when associating the map data units with the corresponding fields. The latency interval of the interleaver/de-interleaver combination is given by the expression L=N×(B−1). In the specific example of the convolutional interleaver 14 given above, N=48 and B=16. Therefore, the latency interval of the interleaver/de-interleaver combination according to this example is L=48×15=720 bits or 15 (720/48) fields. If two additional fields are allowed for processing time, the system may be characterized by the following relationships:

-   -   Coded mdu for field n: A₀B₀P₁C₀A_(E)P₂B_(E)C_(E)P₃     -   Coded mdu for field n+1: A₀B₀P₁C₀A_(E)P₂B_(E)C_(E)P₃         where mdu A₀B₀C₀ identifies the mix of VSB and E-VSB segments         for field n+2+L and where mdu A_(E)B_(E)C_(E) identifies the mix         of VSB and E-VSB segments for field n+3+L.

A VSB data source 16 provides VSB data and an E-VSB data source 18 provides E-VSB data. One result of the Kerdock encoding applied by the Kerdock encoder 12 is that the mdus are more robustly encoded than are the VSB data and the E-VSB data. The controller 10 controls the VSB data source 16 and the E-VSB data source 18 so as to control the mix of VSB and E-VSB data segments in a particular field. Because of the system latency interval, the map data unit, which notifies the receiver of this mix and which is encoded by the Kerdock encoder 12, is transmitted beginning in a field that is transmitted 17 or 18 fields earlier than the field containing that mix and ends in a field that is transmitted 1 or 2 fields earlier that the field containing that mix. That is, the map data unit supplied by the controller 10 to the Kerdock encoder 12 during formatting of the current field corresponds to VSB and/or E-VSB data to be transmitted 17 or 18 fields later. However, because of the interleaving performed by the convolutional interleaver 38, this map data unit is spread over 15 fields.

The data segments supplied by the VSB data source 16 and the E-VSB data source 18, together with the encoded and interleaved map data unit bits from the convolutional interleaver 14, are applied to a data field formatter 20. The data field formatter 20 is synchronized to the field sync signal from the controller 10 and formats the transmitted field so that the forty-eight encoded and interleaved map data unit bits are inserted into the reserved portion of two successive field sync segments. The VSB data source 16 and the E-VSB data source 18 are controlled by the controller 10 so that the VSB and E-VSB data segments supplied by the VSB data source 16 and the E-VSB data source 18 to the data field formatter 20 correspond to a map data unit transmitted beginning n+2+L or n+3+L fields prior thereto. The data field formatter 20 is synchronized so that these VSB and E-VSB data segments are appropriately multiplexed throughout the current field in accordance with that previously transmitted map data unit.

Finally, the formatted fields are successively applied to a standard ATSC modulator and transmitter 22 for transmission.

An example of the convolutional interleaver 14 is shown in FIG. 3 and includes sixteen paths coupled between an input 24 and an output 26 by corresponding synchronized switching functions 28 and 29. As shown in FIG. 2, the input 24 is coupled to the Kerdock encoder 12 and the output 26 is coupled to the data field formatter 20. The switching functions 28 and 29 synchronously step through the sixteen paths on a data element-by-data element basis so that one data element received on the input 24 is coupled through the first path to the output 26, so that the next data element received on the input 24 is coupled through the second path to the output 26, and so on.

The first path of the convolutional interleaver 14 imposes no delay on the data elements passing therethrough, the second path of the convolutional interleaver 14 imposes a three element delay on the data elements passing therethrough, the third path of the convolutional interleaver 14 imposes a six element delay on the data elements passing therethrough, . . . , and the sixteenth path of the convolutional interleaver 14 imposes a forty-five element delay on the data elements passing therethrough.

As shown in FIG. 4, the signal transmitted by the ATSC modulator and transmitter 22 is received by a receiver comprising a tuner 30. The IF output of the tuner 30 is demodulated by an ATSC demodulator 32 in order to provide an analog baseband output representing the transmitted symbols. This analog signal is sampled by an A/D converter 34 under control of a digital processor 38 to convert the demodulated symbols into corresponding multibit digital values. The encoded and interleaved map data unit symbols, which are duplicated in successive fields as discussed above, are applied to a convolutional de-interleaver 40. The remaining symbols are directly applied to the digital processor 38, which converts these remaining symbols to corresponding bits, arranged in data bytes, for application to a segment de-formatter 42. The segment de-formatter 42 receives a de-interleaved and decoded map data unit from a Kerdock decoder 44. The segment de-formatter 42 responds to this de-interleaved and decoded map data unit by passing the VSB segments in the field to a VSB processor 46 and by passing the E-VSB segments in the field to an E-VSB processor 48. The VSB processor 46 and the E-VSB processor 48 decode and otherwise process the respective VSB data and E-VSB data from the segment de-formatter 42.

As an example, the VSB processor 46 may perform Reed-Solomon decoding and, in the case where the VSB data has been trellis encoded in the transmitter, the VSB processor 46 may also perform Viterbi decoding. The E-VSB processor 48, for example, may perform the same decoding as the VSB processor 46 and, in addition, perform the additional decoding corresponding to the additional coding that was performed in the transmitter in order to add robustness to the data. Moreover, the VSB processor 46 and the E-VSB processor 48 may perform de-interleaving and de-randomization.

The interleaved map data unit symbols from the A/D converter 34 are applied to the convolutional de-interleaver 40 which de-interleaves the map data unit symbols in inverse fashion relative to the convolutional interleaver 14 in order to provide the vectors produced by the Kerdock encoder 12. The de-interleaved vectors corresponding to a map data unit and to its corresponding duplicate map data unit are averaged on a bit-by-bit basis by an averaging circuit 50 in order to improve the reliability of the map data units. The de-interleaved and averaged vectors are decoded by the Kerdock decoder 44 in order to recover the map data units that control the segment de-formatter 42. Since the mdus were encoded more robustly than either the VSB data or the E-VSB data, the mdus will be recovered in the receiver with less errors than the data.

As explained previously, the latency interval of the interleave/de-interleave process is accommodated in the system because the map data units provided by the controller 10 define the mix of VSB and E-VSB data segments that are to be transmitted L fields later in time. Exemplary embodiments of the Kerdock decoder 44 and the convolutional de-interleaver 40 are disclosed in the previously referenced U.S. Pat. Nos. 6,226,318 B1 and 5,572,532 respectively.

As discussed below in more detail, the Kerdock decoder 44 may be arranged to provide an estimation of the reliability of the decoding process. In terms of the map data unit specifically, the Kerdock decoder 44 may be arranged to provide an estimation of the reliability of the decoding of the map data unit. If this reliability indicates that the decoded map data unit is not reliable, the immediately previous map data unit that was reliably decoded is used to de-format the field instead of the currently decoded map data unit. This operation is justified by assuming that the mix between VSB data and E-VSB data changes from field to field at a relatively slow rate so that the substitute map data unit will likely define the appropriate segment mix.

An example of the convolutional de-interleaver 40 is shown in FIG. 5 and includes sixteen paths coupled between an input 60 and an output 62 by corresponding synchronized switching functions 64 and 66. As shown in FIG. 4, the input 60 is coupled to the A/D converter 34 and the output 62 is coupled to the averaging circuit 50. The switching functions 64 and 66 synchronously step through the sixteen paths on a data element-by-data element basis so that one data element received on the input 60 is coupled through the first path to the output 62, so that the next data element received on the input 60 is coupled through the second path to the output 62, and so on.

The first path of the convolutional de-interleaver 40 imposes a forty-five element delay on the data elements passing therethrough, the second path of the convolutional interleaver 14 imposes a forty-two delay on the data elements passing therethrough, . . . , the fourteenth path of the convolutional interleaver 14 imposes a six element delay on the data elements passing therethrough, the fifteenth path of the convolutional interleaver 14 imposes a three element delay on the data elements passing therethrough, and the sixteenth path of the convolutional interleaver 14 imposes no delay on the data elements passing therethrough.

A systematic Kerdock encoder 70 is shown in FIG. 6 and may be used for the Kerdock encoder 12. The systematic Kerdock encoder 70 accepts an input having N data elements, such as the map data sub-units A₀ and B₀ having a total of eight bits, and outputs a corresponding code word having 2N data elements, such as the code word {A₀ B₀ P₁} having a total of sixteen bits, by appending N parity bits, such as the eight parity bits P₁, to the end of the N input data elements, such as the map data sub-units A₀ and B₀ having eight bits. The N parity data elements are read out of a look-up table 72 based on the N input data elements.

In the case where each map data sub-unit is four bits so that two map data sub-units are eight bits, the look-up table 72 stores 256 sets of parity bits where each set contains eight bits. Appendix A shows exemplary data for the look-up table 72. Each bit in this exemplary data has one of only two values, 1 or −1. In describing the relationship between the input bits and the sets of parity bits stored in the look-up table, it is useful to think of a bit having a value of −1 as a bit having a value of 0. The eight bits that are provided as an input to the systematic Kerdock encoder 70 are used as an address into the look-up table 72.

The data stored in the look-up table 72 are arranged so that, when a set of eight parity bits is read out according to eight input bits and is appended to the eight input bits, a Kerdock code word is formed. A Kerdock code word has a minimum distance of six from any other Kerdock code word. Distance is a measure of how many corresponding bits differ between two code words.

The relationship between the input bits and the bits stored in the look-up table 72 fosters the creation of the Kerdock code words that are output by the systematic Kerdock encoder 70. This relationship is as follows: the input bits having a value of −1 −1 −1 −1 −1 −1 −1 −1 (i.e., the address 0) are used to address the first row of Appendix A; the input bits having a value of −1 −1 −1 −1 −1 −1 −1 1 (i.e., the address 1) are used to address the second row of Appendix A; the input bits having a value of −1 −1 −1 −1 −1 −1 1 −1 (i.e., the address 2) are used to address the third row of Appendix A; the input bits having a value of −1 −1 −1 −1 −1 −1 1 (i.e., the address 3) are used to address the fourth row of Appendix A; and so on.

As an example, when the input −1 −1 −1 −1 −1 −1 −1 −1 is received by the systematic Kerdock encoder 70, the first row of Appendix A is read out from the look-up table 72 and is appended to this input to form the Kerdock code word −1 −1 −1 −1 −1 −1 −1 −1 −1 1 −1 1 1 −1 1 −1. As another example, when the input −1 −1 −1 −1 −1 −1 −1 1 is received by the systematic Kerdock encoder 70, the second row of Appendix A is read out from the look-up table 72 and is appended to this input to form the Kerdock code word −1 −1 −1 −1 −1 −1 −1 1 1 −1 −1 −1 1 1 −1 −1. It is noted that these two Kerdock code words have a distance of six from each other because the eighth, ninth, tenth, twelfth, fourteenth, and fifteenth bits are different between the two Kerdock code words.

Alternatively, a systematic Kerdock encoder 74 is shown in FIG. 7 and may be used for the Kerdock encoder 12. The systematic Kerdock encoder 74 accepts an input having N data elements, such as the map data sub-units A₀ and B₀ having a total of eight bits, and outputs a corresponding code word having 2N data elements, such as the code word {A₀ B₀ P₁} having a total of sixteen bits, by reading out the 2N data element code word from a look-up table 76.

In the case where each map data sub-unit is four bits so that two map data sub-units are eight bits, the look-up table 76 stores 256 code words where each code word contains sixteen bits. Appendix B shows exemplary data for the look-up table 76. As in the case of Appendix A, each bit in this exemplary data has one of only two values, 1 or −1. The eight bits that are provided as an input to the systematic Kerdock encoder 74 are used as an address into the look-up table 76 and correspond to the first eight bits of a row in the data shown in Appendix B. The row of Appendix B that is addressed by a set of eight input bits is the row in which the first eight bits match the eight input bits. Each code word stored in the look-up table 76 is a Kerdock code word because each code word stored in the look-up table 76 has a minimum distance of six from any other Kerdock code word stored in the look-up table 76.

As an example, when the input −1 −1 −1 −1 −1 −1 −1 −1 is received by the systematic Kerdock encoder 74, a row 78 of Appendix A is read out from the look-up table 76. The row 78 contains the following bits: −1 −1 −1 −1 −1 −1 −1 −1 −1 −1 1 1 −1 1 −1. As another example, when the input −1 −1 −1 −1 −1 −1 −1 1 is received by the systematic Kerdock encoder 74, a row 80 of Appendix A is read out from the look-up table 76. The row 80 contains the following bits: −1 −1 −1 −1 −1 −1 −1 1 1 −1 −1 −1 1 1 −1 −1. It is noted that these two Kerdock code words have a distance of six from each other because the eighth, ninth, tenth, twelfth, fourteenth, and fifteenth bits are different between the two Kerdock code words.

A systematic Kerdock decoder 82 is shown in FIG. 8 and may be used for the Kerdock decoder 44. The systematic Kerdock decoder 82 accepts an input having 2N data elements, such as eight bits corresponding to the map data sub-units A₀ and B₀ and 8 bits corresponding to the parity bits, and outputs a vector of N data elements, such as the map data sub-units A₀ and B₀ having eight bits.

More specifically, a correlator 84 correlates the 2N input data elements with each of 256 Kerdock code words stored in a look-up table 86, where each Kerdock code word comprises sixteen data elements such as bits. Appendix B shows exemplary data for the look-up table 86. The correlation implemented by the correlator 84, for example, may be a dot product of the input 2N data elements and each of the Kerdock code words stored in the look-up table 86.

Thus, the first data element of the 2N input data elements is multiplied by the first data element of a first Kerdock code word stored in the look-up table 86 to form a first product, the second data element of the 2N input data elements is multiplied by the second data element of the first Kerdock code word stored in the look-up table 86 to form a second product, . . . , and the sixteenth data element of the 2N input data elements is multiplied by the sixteenth data element of the first Kerdock code word stored in the look-up table 86 to form a sixteenth product. The resulting sixteen products are added to form a first correlation between the 2N input data elements and the first Kerdock code word stored in the look-up table 86. This process is repeated for each of the other 255 Kerdock code words stored in the look-up table 86.

An identifier 88 identifies the Kerdock code word from the look-up table 86 that produced the largest correlation and outputs the first eight data elements of this Kerdock code word as the eight data elements making up two map data sub-units of a map data unit to be applied to the segment de-formatter 42. The identifier 88 may also form the difference between the largest correlation and the next largest correlation as a reliability factor that indicates the reliability with which the 2N input data elements have been decoded.

Alternatively, a systematic Kerdock decoder 90 is shown in FIG. 9 and may be used for the Kerdock decoder 44. The systematic Kerdock decoder 90 accepts an input having 2N data elements, such as the map data sub-units A₀ and B₀ having eight bits and the corresponding eight parity bits P₁, and outputs a vector having N data elements, such as the map data sub-units A₀ and B₀ having eight bits.

More specifically, a correlator 92 correlates the 2N input data elements with each of 256 Kerdock code words that are supplied to the correlator 92 from a sequence generator 94 and a look-up table 96. Each Kerdock code word supplied to the correlator 92 from the sequence generator 94 and the look-up table 96 comprises sixteen data elements such as bits. The correlation implemented by the correlator 92, for example, may be the same correlation as implemented by the correlator 84.

The first eight bits of the first Kerdock code word supplied to the correlator 92 comprises a first sequence of eight bits generated by the sequence generator 94. For example, this first sequence may be −1 −1 −1 −1 −1 −1 −1 −1 (i.e., 0). The second eight bits of the first Kerdock code word supplied to the correlator 92 comprise eight bits read out of the look-up table 96 based on an address corresponding to the eight bits generated by the sequence generator 94. These two sets of eight bits are appended together and are supplied to the correlator 92.

Appendix A shows exemplary data for the look-up table 96. The relationship between the input bits from the sequence generator 94 and the bits stored in the look-up table 96 may be the same as that used by the systematic Kerdock encoder 70. Accordingly, the input bits having a value of −1 −1 −1 −1 −1 −1 −1 −1 (i.e., the address 0) are used to address the first row of Appendix A, the input bits having a value of −1 −1 −1 −1 −1 −1 −1 1 (i.e., the address 1) are used to address the second row of Appendix A, and so on.

The correlator 92 produces a first correlation based upon the input 2N bits and the first Kerdock code word produced by the sequence generator 94 and the look-up table 96.

The first eight bits of the second Kerdock code word supplied to the correlator 92 comprises a second sequence of eight bits generated by the sequence generator 94. For example, this second sequence may be −1 −1 −1 −1 −1 −1 −1 1 (i.e., 1). The second eight bits of the second Kerdock code word supplied to the correlator 92 comprise eight bits read out of the look-up table 96 based on an address corresponding to the eight bits generated by the sequence generator 94. These two sets of eight bits are appended together and are supplied to the correlator 92.

The correlator 92 produces a second correlation based upon the input 2N bits and the second Kerdock code word produced by the sequence generator 94 and the look-up table 96, and so on.

An identifier 98 identifies the Kerdock code word from the sequence generator 94 and the look-up table 96 that produced the largest correlation and outputs the first eight data elements of this Kerdock code word as the eight data elements making up two map data sub-units of a map data unit to be applied to the segment de-formatter 42. The identifier 98 may also form the difference between the largest correlation and the next largest correlation as a reliability factor indicating the reliability with which the 2N input data elements have been decoded.

As a further alternative, a systematic decoder 100 shown in FIG. 10 may be used for the Kerdock decoder 44. The systematic decoder 100 is a modified form of the non-systematic decoder disclosed in U.S. Pat. No. 6,226,318 B1. The systematic decoder 100 includes two column rotators 102 and 104, and eight vector multipliers 106, 108, 110, 112, 114, 116, 118, and 120. The modification involves the addition of the two column rotators to the non-systematic decoder disclosed in U.S. Pat. No. 6,226,318 B1.

Appendix C shows the coset leaders that are applied to first inputs of the multipliers 106, 108, 110, 112, 114, 116, 118, and 120. Accordingly, the coset leader in the first row of Appendix C is applied to the first input of the multiplier 106, the coset leader in the second row of Appendix C is applied to the first input of the multiplier 108, the coset leader in the third row of Appendix C is applied to the first input of the multiplier 110, . . . , and the coset leader in the eighth row of Appendix C is applied to the first input of the multiplier 120.

The input sixteen data elements to be decoded are re-arranged (such as rotated) according to the first column of the following table and this rotated input is applied to each of the second inputs of the multipliers 106, 108, 110, and 112. The input to be decoded is rotated according to the second column of the following table and this rotated input is applied to each of the second inputs of the multipliers 114, 116, 118, and 120.

TABLE 4→1 4→1 15→2  15→2  14→3  14→3  9→4 9→4 5→5 6→5 12→6  11→6  7→7 8→7 2→8 1→8 3→9 3→9 16→10 16→10 13→11 13→11 10→12 10→12  6→13  5→13 11→14 12→14  8→15  7→15  1→16  2→16

According to the first column of the above table, the fourth input data element is moved to the first data element position of the output to be supplied to the second inputs of the multipliers 106, 108, 110, and 112, the fifteenth input data element is moved to the second data element position of the output to be supplied to the second inputs of the multipliers 106, 108, 110, and 112, the fourteenth input data element is moved to the third data element position of the output to be supplied to the second inputs of the multipliers 106, 108, 110, and 112, . . . , and the first input data element is moved to the sixteenth data element position of the output to be supplied to the second inputs of the multipliers 106, 108, 110, and 112. Accordingly, the sixteen data element input is rotated by the column rotator 102 to form a sixteen data element output to be supplied to the second inputs of the multipliers 106, 108, 110, and 112.

Similarly, the second column of the above table shows the rotation imposed by the column rotator 104 on the sixteen input data elements to form a sixteen data element output to be supplied to the second inputs of the multipliers 114, 116, 118, and 120. The column rotators 102 and 104 in effect convert a systematic code vector to a non-systematic code vector.

The outputs of the multipliers 106, 108, 110, 112, 114, 116, . . . 118, and 120 are processed by a corresponding one of 16×16 Hadamard transforms 119 ₁–119 ₈ to produce corresponding spectra that are analyzed by a spectral analyzer 122. The spectral analyzer 122 determines which spectra contains the largest coefficient and decodes the largest coefficient to produce the corresponding Kerdock code word. The first eight bits of this Kerdock code word are supplied by the spectral analyzer 122 as the eight data elements making up two map data sub-units of a map data unit to be applied to the segment de-formatter 42. The spectral analyzer 122 may also form the difference between the largest coefficient and the next largest coefficient as a reliability factor indicating the reliability with which the 2N input data elements have been decoded.

The receiving arrangement shown in FIG. 4 performs the functions illustrated by the flow chart of FIGS. 11A and 11B. A block 200 receives a field, and a block 202 parses the field in order to recover the map data unit symbols. A block 204 de-interleaves the map data unit symbols, and a block 206 stores the de-interleaved map data unit symbols in a memory. When a full map data unit has been de-interleaved as determined by a block 208, a block 210 determines whether this map data unit corresponds to an odd field or an even field. If the block 210 determines that this map data unit corresponds to an odd field, a block 212 simply stores the map data unit awaiting de-interleaving and decoding of the duplicate of this data map unit because data map units transmitted in odd fields are duplicated in even fields. After the non-duplicate map data unit is stored by the block 212, flow returns to the block 200.

If the block 210 determines that this map data unit corresponds to an even field, the recovered map data unit is a duplicate of the map data unit previously de-interleaved and decoded. Accordingly, a block 214 averages the current map data unit and the previous map data unit. A block 216 decodes the map data unit average, and a block 218 computes a reliability factor for the map data unit average. A block 220 stores the average map and the corresponding reliability factor.

A block 222 determines whether the reliability factor of a decoded map data unit corresponding to the field received at the block 200 indicates that the decoded map data unit has been reliably decoded. If the reliability factor indicates reliable decoding, a block 224 de-formats the field corresponding to the appropriate map data unit and sends the VSB data and/or the E-VSB data to the VSB processor 46 and/or the E-VSB processor 48, as appropriate, in accordance with the de-formatting.

On the other hand, if the reliability factor indicates that the decoding was not reliable as determined at the block 222, a block 226 retrieves the immediately previous map data unit that was reliably decoded, and a block 228 de-formats the field in accordance with the retrieved immediately previous map data unit and sends the VSB data and/or the E-VSB data to the VSB processor 46 and/or the E-VSB processor 48, as appropriate, in accordance with the de-formatting.

Appendix A

{ −1,   1, −1,   1,   1, −1,   1, −1, }, {   1, −1, −1, −1,   1,   1, −1, −1, }, {   1, −1,   1,   1, −1, −1,   1,   1, }, { −1,   1,   1, −1, −1,   1, −1,   1, }, { −1, −1, −1, −1, −1, −1, −1,   1, }, {   1,   1,   1, −1,   1, −1,   1,   1, }, {   1,   1, −1,   1, −1,   1, −1, −1, }, { −1, −1,   1,   1,   1,   1,   1, −1, }, {   1,   1,   1,   1,   1,   1, −1,   1, }, { −1, −1, −1,   1, −1,   1,   1,   1, }, { −1, −1,   1, −1,   1, −1, −1, −1, }, {   1,   1, −1, −1, −1, −1,   1, −1, }, {   1, −1,   1, −1, −1,   1,   1, −1, }, { −1,   1,   1,   1, −1, −1, −1, −1, }, { −1,   1, −1, −1,   1,   1,   1,   1, }, {   1, −1, −1,   1,   1, −1, −1,   1, }, {   1,   1,   1, −1, −1, −1, −1, −1, }, { −1, −1,   1,   1,   1, −1, −1,   1, }, { −1, −1, −1, −1, −1,   1,   1, −1, }, {   1,   1, −1,   1,   1,   1,   1,   1, }, { −1,   1,   1,   1, −1,   1,   1,   1, }, {   1, −1, −1,   1, −1, −1,   1, −1, }, {   1, −1,   1, −1,   1,   1, −1,   1, }, { −1,   1, −1, −1,   1, −1, −1, −1, }, {   1, −1, −1, −1,   1, −1,   1,   1, }, { −1,   1,   1, −1,   1,   1,   1, −1, }, { −1,   1, −1,   1, −1, −1, −1,   1, }, {   1, −1,   1,   1, −1,   1, −1, −1, }, { −1, −1, −1,   1,   1,   1, −1, −1, }, {   1,   1, −1, −1, −1,   1, −1,   1, }, {   1,   1,   1,   1,   1, −1,   1, −1, }, { −1, −1,   1, −1, −1, −1,   1,   1, }, { −1, −1,   1, −1,   1,   1,   1,   1, }, {   1,   1,   1,   1, −1,   1,   1, −1, }, {   1,   1, −1, −1,   1, −1, −1,   1, }, { −1, −1, −1,   1, −1, −1, −1, −1, }, {   1, −1,   1,   1,   1, −1, −1, −1, }, { −1,   1, −1,   1,   1,   1, −1,   1, }, { −1,   1,   1, −1, −1, −1,   1, −1, }, {   1, −1, −1, −1, −1,   1,   1,   1, }, { −1,   1, −1, −1, −1,   1, −1, −1, }, {   1, −1,   1, −1, −1, −1, −1,   1, }, {   1, −1, −1,   1,   1,   1,   1, −1, }, { −1,   1,   1,   1,   1, −1,   1,   1, }, {   1,   1, −1,   1, −1, −1,   1,   1, }, { −1, −1, −1, −1,   1, −1,   1, −1, }, { −1, −1,   1,   1, −1,   1, −1,   1, }, {   1,   1,   1, −1,   1,   1, −1, −1, }, {   1, −1, −1,   1, −1,   1, −1,   1, }, { −1,   1, −1, −1, −1, −1,   1,   1, }, { −1,   1,   1,   1,   1,   1, −1, −1, }, {   1, −1,   1, −1,   1, −1,   1, −1, }, {   1,   1, −1, −1,   1,   1,   1, −1, }, { −1, −1,   1, −1, −1,   1, −1, −1, }, { −1, −1, −1,   1,   1, −1,   1,   1, }, {   1,   1,   1,   1, −1, −1, −1,   1, }, { −1, −1,   1,   1, −1, −1,   1, −1, }, {   1,   1, −1,   1,   1, −1, −1, −1, }, {   1,   1,   1, −1, −1,   1,   1,   1, }, { −1, −1, −1, −1,   1,   1, −1,   1, }, { −1,   1,   1, −1,   1, −1, −1,   1, }, {   1, −1,   1,   1,   1,   1,   1,   1, }, {   1, −1, −1, −1, −1, −1, −1, −1, }, { −1,   1, −1,   1, −1,   1,   1, −1, }, {   1,   1, −1, −1, −1,   1,   1,   1, }, { −1, −1,   1, −1, −1, −1,   1, −1, }, { −1, −1, −1,   1,   1,   1, −1,   1, }, {   1,   1,   1,   1,   1, −1, −1, −1, }, { −1,   1,   1, −1,   1,   1, −1, −1, }, {   1, −1,   1,   1, −1,   1, −1,   1, }, {   1, −1, −1, −1,   1, −1,   1, −1, }, { −1,   1, −1,   1, −1, −1,   1,   1, }, {   1, −1, −1,   1, −1, −1, −1, −1, }, { −1,   1, −1, −1,   1, −1, −1,   1, }, { −1,   1,   1,   1, −1,   1,   1, −1, }, {   1, −1,   1, −1,   1,   1,   1,   1, }, { −1, −1,   1,   1,   1, −1,   1,   1, }, {   1,   1, −1,   1,   1,   1,   1, −1, }, {   1,   1,   1, −1, −1, −1, −1,   1, }, { −1, −1, −1, −1, −1,   1, −1, −1, }, {   1, −1,   1,   1,   1,   1,   1, −1, }, { −1,   1, −1,   1, −1,   1, −1, −1, }, { −1,   1,   1, −1,   1, −1,   1,   1, }, {   1, −1, −1, −1, −1, −1, −1,   1, }, {   1,   1, −1,   1,   1, −1, −1,   1, }, { −1, −1, −1, −1,   1,   1,   1,   1, }, { −1, −1,   1,   1, −1, −1, −1, −1, }, {   1,   1,   1, −1, −1,   1,   1, −1, }, { −1, −1,   1, −1, −1,   1, −1,   1, }, {   1,   1,   1,   1, −1, −1,   1,   1, }, {   1,   1, −1, −1,   1,   1, −1, −1, }, { −1, −1, −1,   1,   1, −1,   1, −1, }, { −1,   1, −1, −1, −1, −1,   1, −1, }, {   1, −1,   1, −1,   1, −1, −1, −1, }, {   1, −1, −1,   1, −1,   1,   1,   1, }, { −1,   1,   1,   1,   1,   1, −1,   1, }, { −1,   1,   1,   1, −1, −1, −1,   1, }, {   1, −1, −1,   1,   1, −1,   1,   1, }, {   1, −1,   1, −1, −1,   1, −1, −1, }, { −1,   1, −1, −1,   1,   1,   1, −1, }, { −1, −1, −1,   1, −1,   1,   1, −1, }, {   1,   1, −1, −1, −1, −1, −1, −1, }, {   1,   1,   1,   1,   1,   1,   1,   1, }, { −1, −1,   1, −1,   1, −1, −1,   1, }, {   1,   1,   1, −1,   1, −1,   1, −1, }, { −1, −1,   1,   1,   1,   1, −1, −1, }, { −1, −1, −1, −1, −1, −1,   1,   1, }, {   1,   1, −1,   1, −1,   1, −1,   1, }, {   1, −1, −1, −1,   1,   1, −1,   1, }, { −1,   1,   1, −1, −1,   1,   1,   1, }, { −1,   1, −1,   1,   1, −1, −1, −1, }, {   1, −1,   1,   1, −1, −1,   1, −1, }, { −1, −1, −1, −1,   1, −1, −1, −1, }, {   1,   1,   1, −1,   1,   1, −1,   1, }, {   1,   1, −1,   1, −1, −1,   1, −1, }, { −1, −1,   1,   1, −1,   1,   1,   1, }, {   1, −1,   1, −1, −1, −1,   1,   1, }, { −1,   1,   1,   1,   1, −1,   1, −1, }, { −1,   1, −1, −1, −1,   1, −1,   1, }, {   1, −1, −1,   1,   1,   1, −1, −1, }, { −1,   1, −1,   1,   1,   1,   1,   1, }, {   1, −1, −1, −1, −1,   1,   1, −1, }, {   1, −1,   1,   1,   1, −1, −1,   1, }, { −1,   1,   1, −1, −1, −1, −1, −1, }, {   1,   1,   1,   1, −1,   1, −1, −1, }, { −1, −1, −1,   1, −1, −1, −1,   1, }, { −1, −1,   1, −1,   1,   1,   1, −1, }, {   1,   1, −1, −1,   1, −1,   1,   1, }, { −1, −1,   1,   1, −1,   1, −1, −1, }, {   1,   1, −1,   1, −1, −1, −1,   1, }, {   1,   1,   1, −1,   1,   1,   1, −1, }, { −1, −1, −1, −1,   1, −1,   1,   1, }, {   1, −1, −1,   1,   1,   1,   1,   1, }, { −1,   1, −1, −1, −1,   1,   1, −1, }, { −1,   1,   1,   1,   1, −1, −1,   1, }, {   1, −1,   1, −1, −1, −1, −1, −1, }, { −1,   1,   1, −1, −1, −1,   1,   1, }, {   1, −1,   1,   1,   1, −1,   1, −1, }, {   1, −1, −1, −1, −1,   1, −1,   1, }, { −1,   1, −1,   1,   1,   1, −1, −1, }, {   1,   1, −1, −1,   1, −1, −1, −1, }, { −1, −1,   1, −1,   1,   1, −1,   1, }, { −1, −1, −1,   1, −1, −1,   1, −1, }, {   1,   1,   1,   1, −1,   1,   1,   1, }, { −1,   1, −1, −1,   1,   1, −1,   1, }, {   1, −1,   1, −1, −1,   1,   1,   1, }, {   1, −1, −1,   1,   1, −1, −1, −1, }, { −1,   1,   1,   1, −1, −1,   1, −1, }, { −1, −1,   1, −1,   1, −1,   1, −1, }, {   1,   1,   1,   1,   1,   1, −1, −1, }, {   1,   1, −1, −1, −1, −1,   1,   1, }, { −1, −1, −1,   1, −1,   1, −1,   1, }, {   1,   1, −1,   1, −1,   1,   1, −1, }, { −1, −1, −1, −1, −1, −1, −1, −1, }, { −1, −1,   1,   1,   1,   1,   1,   1, }, {   1,   1,   1, −1,   1, −1, −1,   1, }, {   1, −1,   1,   1, −1, −1, −1,   1, }, { −1,   1, −1,   1,   1, −1,   1,   1, }, { −1,   1,   1, −1, −1,   1, −1, −1, }, {   1, −1, −1, −1,   1,   1,   1, −1, }, {   1, −1, −1, −1, −1, −1,   1, −1, }, { −1,   1,   1, −1,   1, −1, −1, −1, }, { −1,   1, −1,   1, −1,   1,   1,   1, }, {   1, −1,   1,   1,   1,   1, −1,   1, }, {   1,   1,   1, −1, −1,   1, −1,   1, }, { −1, −1,   1,   1, −1, −1,   1,   1, }, { −1, −1, −1, −1,   1,   1, −1, −1, }, {   1,   1, −1,   1,   1, −1,   1, −1, }, { −1, −1, −1,   1,   1, −1, −1,   1, }, {   1,   1, −1, −1,   1,   1,   1,   1, }, {   1,   1,   1,   1, −1, −1, −1, −1, }, { −1, −1,   1, −1, −1,   1,   1, −1, }, { −1,   1,   1,   1,   1,   1,   1, −1, }, {   1, −1, −1,   1, −1,   1, −1, −1, }, {   1, −1,   1, −1,   1, −1,   1,   1, }, { −1,   1, −1, −1, −1, −1, −1,   1, }, {   1,   1,   1,   1,   1, −1,   1,   1, }, { −1, −1, −1,   1,   1,   1,   1, −1, }, { −1, −1,   1, −1, −1, −1, −1,   1, }, {   1,   1, −1, −1, −1,   1, −1, −1, }, { −1,   1, −1,   1, −1, −1, −1, −1, }, {   1, −1, −1, −1,   1, −1, −1,   1, }, {   1, −1,   1,   1, −1,   1,   1, −1, }, { −1,   1,   1, −1,   1,   1,   1,   1, }, {   1, −1,   1, −1,   1,   1, −1, −1, }, { −1,   1,   1,   1, −1,   1, −1,   1, }, { −1,   1, −1, −1,   1, −1,   1, −1, }, {   1, −1, −1,   1, −1, −1,   1,   1, }, { −1, −1, −1, −1, −1,   1,   1,   1, }, {   1,   1,   1, −1, −1, −1,   1, −1, }, {   1,   1, −1,   1,   1,   1, −1,   1, }, { −1, −1,   1,   1,   1, −1, −1, −1, }, {   1, −1,   1, −1,   1, −1, −1,   1, }, { −1,   1,   1,   1,   1,   1,   1,   1, }, { −1,   1, −1, −1, −1, −1, −1, −1, }, {   1, −1, −1,   1, −1,   1,   1, −1, }, {   1,   1,   1,   1, −1, −1,   1, −1, }, { −1, −1, −1,   1,   1, −1, −1, −1, }, { −1, −1,   1, −1, −1,   1,   1,   1, }, {   1,   1, −1, −1,   1,   1, −1,   1, }, { −1, −1, −1, −1,   1,   1,   1, −1, }, {   1,   1,   1, −1, −1,   1, −1, −1, }, {   1,   1, −1,   1,   1, −1,   1,   1, }, { −1, −1,   1,   1, −1, −1, −1,   1, }, { −1,   1, −1,   1, −1,   1, −1,   1, }, {   1, −1, −1, −1, −1, −1,   1,   1, }, {   1, −1,   1,   1,   1,   1, −1, −1, }, { −1,   1,   1, −1,   1, −1,   1, −1, }, { −1, −1, −1,   1, −1, −1,   1,   1, }, {   1,   1, −1, −1,   1, −1,   1, −1, }, {   1,   1,   1,   1, −1,   1, −1,   1, }, { −1, −1,   1, −1,   1,   1, −1, −1, }, {   1, −1, −1, −1, −1,   1, −1, −1, }, { −1,   1,   1, −1, −1, −1, −1,   1, }, { −1,   1, −1,   1,   1,   1,   1, −1, }, {   1, −1,   1,   1,   1, −1,   1,   1, }, { −1,   1,   1,   1,   1, −1, −1, −1, }, {   1, −1, −1,   1,   1,   1, −1,   1, }, {   1, −1,   1, −1, −1, −1,   1, −1, }, { −1,   1, −1, −1, −1,   1,   1,   1, }, {   1,   1,   1, −1,   1,   1,   1,   1, }, { −1, −1,   1,   1, −1,   1,   1, −1, }, { −1, −1, −1, −1,   1, −1, −1,   1, }, {   1,   1, −1,   1, −1, −1, −1, −1, }, {   1,   1, −1,   1,   1,   1, −1, −1, }, { −1, −1, −1, −1, −1,   1, −1,   1, }, { −1, −1,   1,   1,   1, −1,   1, −1, }, {   1,   1,   1, −1, −1, −1,   1,   1, }, { −1,   1, −1, −1,   1, −1,   1,   1, }, {   1, −1,   1, −1,   1,   1,   1, −1, }, {   1, −1, −1,   1, −1, −1, −1,   1, }, { −1,   1,   1,   1, −1,   1, −1, −1, }, {   1, −1,   1,   1, −1,   1,   1,   1, }, { −1,   1, −1,   1, −1, −1,   1, −1, }, { −1,   1,   1, −1,   1,   1, −1,   1, }, {   1, −1, −1, −1,   1, −1, −1, −1, }, { −1, −1,   1, −1, −1, −1, −1, −1, }, {   1,   1,   1,   1,   1, −1, −1,   1, }, {   1,   1, −1, −1, −1,   1,   1, −1, }, { −1, −1, −1,   1,   1,   1,   1,   1, }, { −1,   1,   1, −1, −1,   1,   1, −1, }, {   1, −1,   1,   1, −1, −1, −1, −1, }, {   1, −1, −1, −1,   1,   1,   1,   1, }, { −1,   1, −1,   1,   1, −1, −1,   1, }, { −1, −1,   1,   1,   1,   1, −1,   1, }, {   1,   1, −1,   1, −1,   1,   1,   1, }, {   1,   1,   1, −1,   1, −1, −1, −1, }, { −1, −1, −1, −1, −1, −1,   1, −1, }, {   1,   1, −1, −1, −1, −1, −1,   1, }, { −1, −1,   1, −1,   1, −1,   1,   1, }, { −1, −1, −1,   1, −1,   1, −1, −1, }, {   1,   1,   1,   1,   1,   1,   1, −1, }, {   1, −1, −1,   1,   1, −1,   1, −1, }, { −1,   1, −1, −1,   1,   1, −1, −1, }, { −1,   1,   1,   1, −1, −1,   1,   1, }, {   1, −1,   1, −1, −1,   1, −1,   1, }

Appendix B

{   1, −1, −1, −1,   1,   1,   1,   1,   1,   1,   1,   1, −1,   1,   1,   1, }, { −1,   1, −1, −1,   1,   1,   1,   1, −1, −1, −1, −1, −1,   1, −1, −1, }, { −1,   1, −1, −1,   1,   1, −1, −1, −1, −1,   1,   1,   1, −1,   1,   1, }, {   1, −1, −1, −1,   1,   1, −1, −1,   1,   1, −1, −1,   1, −1, −1, −1, }, { −1,   1, −1, −1, −1, −1, −1, −1,   1,   1, −1, −1, −1,   1,   1,   1, }, {   1, −1, −1, −1, −1, −1, −1, −1, −1, −1,   1,   1, −1,   1, −1, −1, }, {   1, −1, −1, −1, −1, −1,   1,   1, −1, −1, −1, −1,   1, −1,   1,   1, }, { −1,   1, −1, −1, −1, −1,   1,   1,   1,   1,   1,   1,   1, −1, −1, −1, }, { −1, −1,   1, −1,   1, −1,   1, −1,   1, −1, −1,   1,   1,   1,   1, −1, }, {   1,   1,   1, −1,   1, −1,   1, −1, −1,   1,   1, −1,   1,   1, −1,   1, }, {   1,   1,   1, −1,   1, −1, −1,   1, −1,   1, −1,   1, −1, −1,   1, −1, }, { −1, −1,   1, −1,   1, −1, −1,   1,   1, −1,   1, −1, −1, −1, −1,   1, }, {   1,   1,   1, −1, −1,   1, −1,   1,   1, −1,   1, −1,   1,   1,   1, −1, }, { −1, −1,   1, −1, −1,   1, −1,   1, −1,   1, −1,   1,   1,   1, −1,   1, }, { −1, −1,   1, −1, −1,   1,   1, −1, −1,   1,   1, −1, −1, −1,   1, −1, }, {   1,   1,   1, −1, −1,   1,   1, −1,   1, −1, −1,   1, −1, −1, −1,   1, }, {   1,   1, −1, −1,   1,   1,   1,   1, −1,   1,   1, −1,   1, −1,   1, −1, }, { −1, −1, −1, −1,   1,   1,   1,   1,   1, −1, −1,   1,   1, −1, −1,   1, }, { −1, −1, −1, −1,   1,   1, −1, −1,   1, −1,   1, −1, −1,   1,   1, −1, }, {   1,   1, −1, −1,   1,   1, −1, −1, −1,   1, −1,   1, −1,   1, −1,   1, }, { −1, −1, −1, −1, −1, −1, −1, −1, −1,   1, −1,   1,   1, −1,   1, −1, }, {   1,   1, −1, −1, −1, −1, −1, −1,   1, −1,   1, −1,   1, −1, −1,   1, }, {   1,   1, −1, −1, −1, −1,   1,   1,   1, −1, −1,   1, −1,   1,   1, −1, }, { −1, −1, −1, −1, −1, −1,   1,   1, −1,   1,   1, −1, −1,   1, −1,   1, }, { −1,   1,   1, −1,   1, −1,   1, −1, −1, −1, −1, −1, −1, −1,   1,   1, }, {   1, −1,   1, −1,   1, −1,   1, −1,   1,   1,   1,   1, −1, −1, −1, −1, }, {   1, −1,   1, −1,   1, −1, −1,   1,   1,   1, −1, −1,   1,   1,   1,   1, }, { −1,   1,   1, −1,   1, −1, −1,   1, −1, −1,   1,   1,   1,   1, −1, −1, }, {   1, −1,   1, −1, −1,   1, −1,   1, −1, −1,   1,   1, −1, −1,   1,   1, }, { −1,   1,   1, −1, −1,   1, −1,   1,   1,   1, −1, −1, −1, −1, −1, −1, }, { −1,   1,   1, −1, −1,   1,   1, −1,   1,   1,   1,   1,   1,   1,   1,   1, }, {   1, −1,   1, −1, −1,   1,   1, −1, −1, −1, −1, −1,   1,   1, −1, −1, }, {   1,   1, −1, −1,   1,   1, −1,   1,   1, −1, −1, −1, −1, −1,   1,   1, }, { −1, −1, −1, −1,   1,   1, −1,   1, −1,   1,   1,   1, −1, −1, −1, −1, }, { −1, −1, −1, −1,   1,   1,   1, −1, −1,   1, −1, −1,   1,   1,   1,   1, }, {   1,   1, −1, −1,   1,   1,   1, −1,   1, −1,   1,   1,   1,   1, −1, −1, }, { −1, −1, −1, −1, −1, −1,   1, −1,   1, −1,   1,   1, −1, −1,   1,   1, }, {   1,   1, −1, −1, −1, −1,   1, −1, −1,   1, −1, −1, −1, −1, −1, −1, }, {   1,   1, −1, −1, −1, −1, −1,   1, −1,   1,   1,   1,   1,   1,   1,   1, }, { −1, −1, −1, −1, −1, −1, −1,   1,   1, −1, −1, −1,   1,   1, −1, −1, }, { −1,   1,   1, −1,   1, −1, −1, −1,   1,   1,   1, −1,   1, −1,   1, −1, }, {   1, −1,   1, −1,   1, −1, −1, −1, −1, −1, −1,   1,   1, −1, −1,   1, }, {   1, −1,   1, −1,   1, −1,   1,   1, −1, −1,   1, −1, −1,   1,   1, −1, }, { −1,   1,   1, −1,   1, −1,   1,   1,   1,   1, −1,   1, −1,   1, −1,   1, }, {   1, −1,   1, −1, −1,   1,   1,   1,   1,   1, −1,   1,   1, −1,   1, −1, }, { −1,   1,   1, −1, −1,   1,   1,   1, −1, −1,   1, −1,   1, −1, −1,   1, }, { −1,   1,   1, −1, −1,   1, −1, −1, −1, −1, −1,   1, −1,   1,   1, −1, }, {   1, −1,   1, −1, −1,   1, −1, −1,   1,   1,   1, −1, −1,   1, −1,   1, }, { −1,   1, −1, −1,   1,   1, −1,   1,   1,   1, −1,   1,   1,   1,   1, −1, }, {   1, −1, −1, −1,   1,   1, −1,   1, −1, −1,   1, −1,   1,   1, −1,   1, }, {   1, −1, −1, −1,   1,   1,   1, −1, −1, −1, −1,   1, −1, −1,   1, −1, }, { −1,   1, −1, −1,   1,   1,   1, −1,   1,   1,   1, −1, −1, −1, −1,   1, }, {   1, −1, −1, −1, −1, −1,   1, −1,   1,   1,   1, −1,   1,   1,   1, −1, }, { −1,   1, −1, −1, −1, −1,   1, −1, −1, −1, −1,   1,   1,   1, −1,   1, }, { −1,   1, −1, −1, −1, −1, −1,   1, −1, −1,   1, −1, −1, −1,   1, −1, }, {   1, −1, −1, −1, −1, −1, −1,   1,   1,   1, −1,   1, −1, −1, −1,   1, }, {   1,   1,   1, −1,   1, −1, −1, −1,   1, −1,   1,   1, −1,   1,   1,   1, }, { −1, −1,   1, −1,   1, −1, −1, −1, −1,   1, −1, −1, −1,   1, −1, −1, }, { −1, −1,   1, −1,   1, −1,   1,   1, −1,   1,   1,   1,   1, −1,   1,   1, }, {   1,   1,   1, −1,   1, −1,   1,   1,   1, −1, −1, −1,   1, −1, −1, −1, }, { −1, −1,   1, −1, −1,   1,   1,   1,   1, −1, −1, −1, −1,   1,   1,   1, }, {   1,   1,   1, −1, −1,   1,   1,   1, −1,   1,   1,   1, −1,   1, −1, −1, }, {   1,   1,   1, −1, −1,   1, −1, −1, −1,   1, −1, −1,   1, −1,   1,   1, }, { −1, −1,   1, −1, −1,   1, −1, −1,   1, −1,   1,   1,   1, −1, −1, −1, }, {   1,   1, −1, −1, −1,   1,   1, −1, −1, −1,   1, −1, −1,   1,   1,   1, }, { −1, −1, −1, −1, −1,   1,   1, −1,   1,   1, −1,   1, −1,   1, −1, −1, }, { −1, −1, −1, −1, −1,   1, −1,   1,   1,   1,   1, −1,   1, −1,   1,   1, }, {   1,   1, −1, −1, −1,   1, −1,   1, −1, −1, −1,   1,   1, −1, −1, −1, }, { −1, −1, −1, −1,   1, −1, −1,   1, −1, −1, −1,   1, −1,   1,   1,   1, }, {   1,   1, −1, −1,   1, −1, −1,   1,   1,   1,   1, −1, −1,   1, −1, −1, }, {   1,   1, −1, −1,   1, −1,   1, −1,   1,   1, −1,   1,   1, −1,   1,   1, }, { −1, −1, −1, −1,   1, −1,   1, −1, −1, −1,   1, −1,   1, −1, −1, −1, }, {   1, −1,   1, −1,   1,   1, −1, −1, −1,   1,   1,   1,   1,   1,   1, −1, }, { −1,   1,   1, −1,   1,   1, −1, −1,   1, −1, −1, −1,   1,   1, −1,   1, }, { −1,   1,   1, −1,   1,   1,   1,   1,   1, −1,   1,   1, −1, −1,   1, −1, }, {   1, −1,   1, −1,   1,   1,   1,   1, −1,   1, −1, −1, −1, −1, −1,   1, }, { −1,   1,   1, −1, −1, −1,   1,   1, −1,   1, −1, −1,   1,   1,   1, −1, }, {   1, −1,   1, −1, −1, −1,   1,   1,   1, −1,   1,   1,   1,   1, −1,   1, }, {   1, −1,   1, −1, −1, −1, −1, −1,   1, −1, −1, −1, −1, −1,   1, −1, }, { −1,   1,   1, −1, −1, −1, −1, −1, −1,   1,   1,   1, −1, −1, −1,   1, }, { −1,   1, −1, −1, −1,   1,   1, −1,   1, −1, −1, −1,   1, −1,   1, −1, }, {   1, −1, −1, −1, −1,   1,   1, −1, −1,   1,   1,   1,   1, −1, −1,   1, }, {   1, −1, −1, −1, −1,   1, −1,   1, −1,   1, −1, −1, −1,   1,   1, −1, }, { −1,   1, −1, −1, −1,   1, −1,   1,   1, −1,   1,   1, −1,   1, −1,   1, }, {   1, −1, −1, −1,   1, −1, −1,   1,   1, −1,   1,   1,   1, −1,   1, −1, }, { −1,   1, −1, −1,   1, −1, −1,   1, −1,   1, −1, −1,   1, −1, −1,   1, }, { −1,   1, −1, −1,   1, −1,   1, −1, −1,   1,   1,   1, −1,   1,   1, −1, }, {   1, −1, −1, −1,   1, −1,   1, −1,   1, −1, −1, −1, −1,   1, −1,   1, }, { −1, −1,   1, −1,   1,   1, −1, −1,   1,   1, −1,   1, −1, −1,   1,   1, }, {   1,   1,   1, −1,   1,   1, −1, −1, −1, −1,   1, −1, −1, −1, −1, −1, }, {   1,   1,   1, −1,   1,   1,   1,   1, −1, −1, −1,   1,   1,   1,   1,   1, }, { −1, −1,   1, −1,   1,   1,   1,   1,   1,   1,   1, −1,   1,   1, −1, −1, }, {   1,   1,   1, −1, −1, −1,   1,   1,   1,   1,   1, −1, −1, −1,   1,   1, }, { −1, −1,   1, −1, −1, −1,   1,   1, −1, −1, −1,   1, −1, −1, −1, −1, }, { −1, −1,   1, −1, −1, −1, −1, −1, −1, −1,   1, −1,   1,   1,   1,   1, }, {   1,   1,   1, −1, −1, −1, −1, −1,   1,   1, −1,   1,   1,   1, −1, −1, }, { −1,   1, −1, −1, −1,   1,   1,   1, −1,   1, −1,   1, −1, −1,   1,   1, }, {   1, −1, −1, −1, −1,   1,   1,   1,   1, −1,   1, −1, −1, −1, −1, −1, }, {   1, −1, −1, −1, −1,   1, −1, −1,   1, −1, −1,   1,   1,   1,   1,   1, }, { −1,   1, −1, −1, −1,   1, −1, −1, −1,   1,   1, −1,   1,   1, −1, −1, }, {   1, −1, −1, −1,   1, −1, −1, −1, −1,   1,   1, −1, −1, −1,   1,   1, }, { −1,   1, −1, −1,   1, −1, −1, −1,   1, −1, −1,   1, −1, −1, −1, −1, }, { −1,   1, −1, −1,   1, −1,   1,   1,   1, −1,   1, −1,   1,   1,   1,   1, }, {   1, −1, −1, −1,   1, −1,   1,   1, −1,   1, −1,   1,   1,   1, −1, −1, }, { −1, −1,   1, −1,   1,   1, −1,   1, −1, −1, −1, −1,   1, −1,   1, −1, }, {   1,   1,   1, −1,   1,   1, −1,   1,   1,   1,   1,   1,   1, −1, −1,   1, }, {   1,   1,   1, −1,   1,   1,   1, −1,   1,   1, −1, −1, −1,   1,   1, −1, }, { −1, −1,   1, −1,   1,   1,   1, −1, −1, −1,   1,   1, −1,   1, −1,   1, }, {   1,   1,   1, −1, −1, −1,   1, −1, −1, −1,   1,   1,   1, −1,   1, −1, }, { −1, −1,   1, −1, −1, −1,   1, −1,   1,   1, −1, −1,   1, −1, −1,   1, }, { −1, −1,   1, −1, −1, −1, −1,   1,   1,   1,   1,   1, −1,   1,   1, −1, }, {   1,   1,   1, −1, −1, −1, −1,   1, −1, −1, −1, −1, −1,   1, −1,   1, }, { −1, −1, −1, −1, −1,   1,   1,   1, −1, −1,   1,   1,   1,   1,   1, −1, }, {   1,   1, −1, −1, −1,   1,   1,   1,   1,   1, −1, −1,   1,   1, −1,   1, }, {   1,   1, −1, −1, −1,   1, −1, −1,   1,   1,   1,   1, −1, −1,   1, −1, }, { −1, −1, −1, −1, −1,   1, −1, −1, −1, −1, −1, −1, −1, −1, −1,   1, }, {   1,   1, −1, −1,   1, −1, −1, −1, −1, −1, −1, −1,   1,   1,   1, −1, }, { −1, −1, −1, −1,   1, −1, −1, −1,   1,   1,   1,   1,   1,   1, −1,   1, }, { −1, −1, −1, −1,   1, −1,   1,   1,   1,   1, −1, −1, −1, −1,   1, −1, }, {   1,   1, −1, −1,   1, −1,   1,   1, −1, −1,   1,   1, −1, −1, −1,   1, }, { −1,   1,   1, −1,   1,   1, −1,   1, −1,   1,   1, −1, −1,   1,   1,   1, }, {   1, −1,   1, −1,   1,   1, −1,   1,   1, −1, −1,   1, −1,   1, −1, −1, }, {   1, −1,   1, −1,   1,   1,   1, −1,   1, −1,   1, −1,   1, −1,   1,   1, }, { −1,   1,   1, −1,   1,   1,   1, −1, −1,   1, −1,   1,   1, −1, −1, −1, }, {   1, −1,   1, −1, −1, −1,   1, −1, −1,   1, −1,   1, −1,   1,   1,   1, }, { −1,   1,   1, −1, −1, −1,   1, −1,   1, −1,   1, −1, −1,   1, −1, −1, }, { −1,   1,   1, −1, −1, −1, −1,   1,   1, −1, −1,   1,   1, −1,   1,   1, }, {   1, −1,   1, −1, −1, −1, −1,   1, −1,   1,   1, −1,   1, −1, −1, −1, }, { −1,   1,   1,   1, −1, −1, −1, −1, −1, −1, −1, −1,   1, −1, −1, −1, }, {   1, −1,   1,   1, −1, −1, −1, −1,   1,   1,   1,   1,   1, −1,   1,   1, }, {   1, −1,   1,   1, −1, −1,   1,   1,   1,   1, −1, −1, −1,   1, −1, −1, }, { −1,   1,   1,   1, −1, −1,   1,   1, −1, −1,   1,   1, −1,   1,   1,   1, }, {   1, −1,   1,   1,   1,   1,   1,   1, −1, −1,   1,   1,   1, −1, −1, −1, }, { −1,   1,   1,   1,   1,   1,   1,   1,   1,   1, −1, −1,   1, −1,   1,   1, }, { −1,   1,   1,   1,   1,   1, −1, −1,   1,   1,   1,   1, −1,   1, −1, −1, }, {   1, −1,   1,   1,   1,   1, −1, −1, −1, −1, −1, −1, −1,   1,   1,   1, }, {   1,   1, −1,   1, −1,   1, −1,   1, −1,   1,   1, −1, −1, −1, −1,   1, }, { −1, −1, −1,   1, −1,   1, −1,   1,   1, −1, −1,   1, −1, −1,   1, −1, }, { −1, −1, −1,   1, −1,   1,   1, −1,   1, −1,   1, −1,   1,   1, −1,   1, }, {   1,   1, −1,   1, −1,   1,   1, −1, −1,   1, −1,   1,   1,   1,   1, −1, }, { −1, −1, −1,   1,   1, −1,   1, −1, −1,   1, −1,   1, −1, −1, −1,   1, }, {   1,   1, −1,   1,   1, −1,   1, −1,   1, −1,   1, −1, −1, −1,   1, −1, }, {   1,   1, −1,   1,   1, −1, −1,   1,   1, −1, −1,   1,   1,   1, −1,   1, }, { −1, −1, −1,   1,   1, −1, −1,   1, −1,   1,   1, −1,   1,   1,   1, −1, }, { −1, −1,   1,   1, −1, −1, −1, −1,   1, −1, −1,   1, −1,   1, −1,   1, }, {   1,   1,   1,   1, −1, −1, −1, −1, −1,   1,   1, −1, −1,   1,   1, −1, }, {   1,   1,   1,   1, −1, −1,   1,   1, −1,   1, −1,   1,   1, −1, −1,   1, }, { −1, −1,   1,   1, −1, −1,   1,   1,   1, −1,   1, −1,   1, −1,   1, −1, }, {   1,   1,   1,   1,   1,   1,   1,   1,   1, −1,   1, −1, −1,   1, −1,   1, }, { −1, −1,   1,   1,   1,   1,   1,   1, −1,   1, −1,   1, −1,   1,   1, −1, }, { −1, −1,   1,   1,   1,   1, −1, −1, −1,   1,   1, −1,   1, −1, −1,   1, }, {   1,   1,   1,   1,   1,   1, −1, −1,   1, −1, −1,   1,   1, −1,   1, −1, }, {   1, −1, −1,   1, −1,   1, −1,   1,   1,   1,   1,   1,   1,   1, −1, −1, }, { −1,   1, −1,   1, −1,   1, −1,   1, −1, −1, −1, −1,   1,   1,   1,   1, }, { −1,   1, −1,   1, −1,   1,   1, −1, −1, −1,   1,   1, −1, −1, −1, −1, }, {   1, −1, −1,   1, −1,   1,   1, −1,   1,   1, −1, −1, −1, −1,   1,   1, }, { −1,   1, −1,   1,   1, −1,   1, −1,   1,   1, −1, −1,   1,   1, −1, −1, }, {   1, −1, −1,   1,   1, −1,   1, −1, −1, −1,   1,   1,   1,   1,   1,   1, }, {   1, −1, −1,   1,   1, −1, −1,   1, −1, −1, −1, −1, −1, −1, −1, −1, }, { −1,   1, −1,   1,   1, −1, −1,   1,   1,   1,   1,   1, −1, −1,   1,   1, }, { −1, −1,   1,   1, −1, −1,   1, −1, −1,   1,   1,   1,   1,   1, −1, −1, }, {   1,   1,   1,   1, −1, −1,   1, −1,   1, −1, −1, −1,   1,   1,   1,   1, }, {   1,   1,   1,   1, −1, −1, −1,   1,   1, −1,   1,   1, −1, −1, −1, −1, }, { −1, −1,   1,   1, −1, −1, −1,   1, −1,   1, −1, −1, −1, −1,   1,   1, }, {   1,   1,   1,   1,   1,   1, −1,   1, −1,   1, −1, −1,   1,   1, −1, −1, }, { −1, −1,   1,   1,   1,   1, −1,   1,   1, −1,   1,   1,   1,   1,   1,   1, }, { −1, −1,   1,   1,   1,   1,   1, −1,   1, −1, −1, −1, −1, −1, −1, −1, }, {   1,   1,   1,   1,   1,   1,   1, −1, −1,   1,   1,   1, −1, −1,   1,   1, }, {   1, −1, −1,   1, −1,   1,   1,   1, −1, −1, −1,   1, −1,   1, −1,   1, }, { −1,   1, −1,   1, −1,   1,   1,   1,   1,   1,   1, −1, −1,   1,   1, −1, }, { −1,   1, −1,   1, −1,   1, −1, −1,   1,   1, −1,   1,   1, −1, −1,   1, }, {   1, −1, −1,   1, −1,   1, −1, −1, −1, −1,   1, −1,   1, −1,   1, −1, }, { −1,   1, −1,   1,   1, −1, −1, −1, −1, −1,   1, −1, −1,   1, −1,   1, }, {   1, −1, −1,   1,   1, −1, −1, −1,   1,   1, −1,   1, −1,   1,   1, −1, }, {   1, −1, −1,   1,   1, −1,   1,   1,   1,   1,   1, −1,   1, −1, −1,   1, }, { −1,   1, −1,   1,   1, −1,   1,   1, −1, −1, −1,   1,   1, −1,   1, −1, }, {   1, −1,   1,   1, −1, −1,   1, −1, −1, −1,   1, −1, −1, −1, −1,   1, }, { −1,   1,   1,   1, −1, −1,   1, −1,   1,   1, −1,   1, −1, −1,   1, −1, }, { −1,   1,   1,   1, −1, −1, −1,   1,   1,   1,   1, −1,   1,   1, −1,   1, }, {   1, −1,   1,   1, −1, −1, −1,   1, −1, −1, −1,   1,   1,   1,   1, −1, }, { −1,   1,   1,   1,   1,   1, −1,   1, −1, −1, −1,   1, −1, −1, −1,   1, }, {   1, −1,   1,   1,   1,   1, −1,   1,   1,   1,   1, −1, −1, −1,   1, −1, }, {   1, −1,   1,   1,   1,   1,   1, −1,   1,   1, −1,   1,   1,   1, −1,   1, }, { −1,   1,   1,   1,   1,   1,   1, −1, −1, −1,   1, −1,   1,   1,   1, −1, }, { −1, −1, −1,   1, −1,   1,   1,   1, −1,   1, −1, −1,   1, −1, −1, −1, }, {   1,   1, −1,   1, −1,   1,   1,   1,   1, −1,   1,   1,   1, −1,   1,   1, }, {   1,   1, −1,   1, −1,   1, −1, −1,   1, −1, −1, −1, −1,   1, −1, −1, }, { −1, −1, −1,   1, −1,   1, −1, −1, −1,   1,   1,   1, −1,   1,   1,   1, }, {   1,   1, −1,   1,   1, −1, −1, −1, −1,   1,   1,   1,   1, −1, −1, −1, }, { −1, −1, −1,   1,   1, −1, −1, −1,   1, −1, −1, −1,   1, −1,   1,   1, }, { −1, −1, −1,   1,   1, −1,   1,   1,   1, −1,   1,   1, −1,   1, −1, −1, }, {   1,   1, −1,   1,   1, −1,   1,   1, −1,   1, −1, −1, −1,   1,   1,   1, }, { −1, −1,   1,   1,   1, −1, −1,   1,   1,   1, −1,   1,   1, −1, −1, −1, }, {   1,   1,   1,   1,   1, −1, −1,   1, −1, −1,   1, −1,   1, −1,   1,   1, }, {   1,   1,   1,   1,   1, −1,   1, −1, −1, −1, −1,   1, −1,   1, −1, −1, }, { −1, −1,   1,   1,   1, −1,   1, −1,   1,   1,   1, −1, −1,   1,   1,   1, }, {   1,   1,   1,   1, −1,   1,   1, −1,   1,   1,   1, −1,   1, −1, −1, −1, }, { −1, −1,   1,   1, −1,   1,   1, −1, −1, −1, −1,   1,   1, −1,   1,   1, }, { −1, −1,   1,   1, −1,   1, −1,   1, −1, −1,   1, −1, −1,   1, −1, −1, }, {   1,   1,   1,   1, −1,   1, −1,   1,   1,   1, −1,   1, −1,   1,   1,   1, }, { −1,   1, −1,   1, −1, −1,   1,   1,   1, −1, −1, −1, −1, −1, −1,   1, }, {   1, −1, −1,   1, −1, −1,   1,   1, −1,   1,   1,   1, −1, −1,   1, −1, }, {   1, −1, −1,   1, −1, −1, −1, −1, −1,   1, −1, −1,   1,   1, −1,   1, }, { −1,   1, −1,   1, −1, −1, −1, −1,   1, −1,   1,   1,   1,   1,   1, −1, }, {   1, −1, −1,   1,   1,   1, −1, −1,   1, −1,   1,   1, −1, −1, −1,   1, }, { −1,   1, −1,   1,   1,   1, −1, −1, −1,   1, −1, −1, −1, −1,   1, −1, }, { −1,   1, −1,   1,   1,   1,   1,   1, −1,   1,   1,   1,   1,   1, −1,   1, }, {   1, −1, −1,   1,   1,   1,   1,   1,   1, −1, −1, −1,   1,   1,   1, −1, }, {   1, −1,   1,   1,   1, −1, −1,   1, −1,   1,   1,   1, −1,   1, −1,   1, }, { −1,   1,   1,   1,   1, −1, −1,   1,   1, −1, −1, −1, −1,   1,   1, −1, }, { −1,   1,   1,   1,   1, −1,   1, −1,   1, −1,   1,   1,   1, −1, −1,   1, }, {   1, −1,   1,   1,   1, −1,   1, −1, −1,   1, −1, −1,   1, −1,   1, −1, }, { −1,   1,   1,   1, −1,   1,   1, −1, −1,   1, −1, −1, −1,   1, −1,   1, }, {   1, −1,   1,   1, −1,   1,   1, −1,   1, −1,   1,   1, −1,   1,   1, −1, }, {   1, −1,   1,   1, −1,   1, −1,   1,   1, −1, −1, −1,   1, −1, −1,   1, }, { −1,   1,   1,   1, −1,   1, −1,   1, −1,   1,   1,   1,   1, −1,   1, −1, }, {   1,   1, −1,   1, −1, −1,   1,   1, −1, −1,   1, −1,   1,   1, −1, −1, }, { −1, −1, −1,   1, −1, −1,   1,   1,   1,   1, −1,   1,   1,   1,   1,   1, }, { −1, −1, −1,   1, −1, −1, −1, −1,   1,   1,   1, −1, −1, −1, −1, −1, }, {   1,   1, −1,   1, −1, −1, −1, −1, −1, −1, −1,   1, −1, −1,   1,   1, }, { −1, −1, −1,   1,   1,   1, −1, −1, −1, −1, −1,   1,   1,   1, −1, −1, }, {   1,   1, −1,   1,   1,   1, −1, −1,   1,   1,   1, −1,   1,   1,   1,   1, }, {   1,   1, −1,   1,   1,   1,   1,   1,   1,   1, −1,   1, −1, −1, −1, −1, }, { −1, −1, −1,   1,   1,   1,   1,   1, −1, −1,   1, −1, −1, −1,   1,   1, }, {   1, −1,   1,   1,   1, −1, −1, −1,   1, −1,   1, −1,   1,   1, −1, −1, }, { −1,   1,   1,   1,   1, −1, −1, −1, −1,   1, −1,   1,   1,   1,   1,   1, }, { −1,   1,   1,   1,   1, −1,   1,   1, −1,   1,   1, −1, −1, −1, −1, −1, }, {   1, −1,   1,   1,   1, −1,   1,   1,   1, −1, −1,   1, −1, −1,   1,   1, }, { −1,   1,   1,   1, −1,   1,   1,   1,   1, −1, −1,   1,   1,   1, −1, −1, }, {   1, −1,   1,   1, −1,   1,   1,   1, −1,   1,   1, −1,   1,   1,   1,   1, }, {   1, −1,   1,   1, −1,   1, −1, −1, −1,   1, −1,   1, −1, −1, −1, −1, }, { −1,   1,   1,   1, −1,   1, −1, −1,   1, −1,   1, −1, −1, −1,   1,   1, }, {   1,   1, −1,   1, −1, −1,   1, −1,   1,   1,   1,   1, −1,   1, −1,   1, }, { −1, −1, −1,   1, −1, −1,   1, −1, −1, −1, −1, −1, −1,   1,   1, −1, }, { −1, −1, −1,   1, −1, −1, −1,   1, −1, −1,   1,   1,   1, −1, −1,   1, }, {   1,   1, −1,   1, −1, −1, −1,   1,   1,   1, −1, −1,   1, −1,   1, −1, }, { −1, −1, −1,   1,   1,   1, −1,   1,   1,   1, −1, −1, −1,   1, −1,   1, }, {   1,   1, −1,   1,   1,   1, −1,   1, −1, −1,   1,   1, −1,   1,   1, −1, }, {   1,   1, −1,   1,   1,   1,   1, −1, −1, −1, −1, −1,   1, −1, −1,   1, }, { −1, −1, −1,   1,   1,   1,   1, −1,   1,   1,   1,   1,   1, −1,   1, −1, }, {   1,   1,   1,   1,   1, −1, −1, −1,   1,   1, −1, −1, −1, −1, −1,   1, }, { −1, −1,   1,   1,   1, −1, −1, −1, −1, −1,   1,   1, −1, −1,   1, −1, }, { −1, −1,   1,   1,   1, −1,   1,   1, −1, −1, −1, −1,   1,   1, −1,   1, }, {   1,   1,   1,   1,   1, −1,   1,   1,   1,   1,   1,   1,   1,   1,   1, −1, }, { −1, −1,   1,   1, −1,   1,   1,   1,   1,   1,   1,   1, −1, −1, −1,   1, }, {   1,   1,   1,   1, −1,   1,   1,   1, −1, −1, −1, −1, −1, −1,   1, −1, }, {   1,   1,   1,   1, −1,   1, −1, −1, −1, −1,   1,   1,   1,   1, −1,   1, }, { −1, −1,   1,   1, −1,   1, −1, −1,   1,   1, −1, −1,   1,   1,   1, −1, }, {   1, −1, −1,   1, −1, −1,   1, −1,   1, −1, −1,   1,   1, −1, −1, −1, }, { −1,   1, −1,   1, −1, −1,   1, −1, −1,   1,   1, −1,   1, −1,   1,   1, }, { −1,   1, −1,   1, −1, −1, −1,   1, −1,   1, −1,   1, −1,   1, −1, −1, }, {   1, −1, −1,   1, −1, −1, −1,   1,   1, −1,   1, −1, −1,   1,   1,   1, }, { −1,   1, −1,   1,   1,   1, −1,   1,   1, −1,   1, −1,   1, −1, −1, −1, }, {   1, −1, −1,   1,   1,   1, −1,   1, −1,   1, −1,   1,   1, −1,   1,   1, }, {   1, −1, −1,   1,   1,   1,   1, −1, −1,   1,   1, −1, −1,   1, −1, −1, }, { −1,   1, −1,   1,   1,   1,   1, −1,   1, −1, −1,   1, −1,   1,   1,   1, },

Appendix C

−1 1   1   1   1   1   1 −1 −1   1 −1   1   1   1 1   1 −1 1 −1 −1   1 −1   1   1 −1 −1   1   1   1   1 1   1 −1 1 −1   1   1 −1 −1   1 −1   1 −1 −1   1 −1 1   1 −1 1   1   1   1   1 −1   1 −1 −1   1   1   1 −1 1 −1 −1 1   1 −1   1   1 −1   1 −1   1 −1 −1 −1 −1 1   1 −1 1 −1   1   1 −1 −1 −1 −1 −1   1 −1 −1 −1 1   1 −1 1 −1 −1   1 −1   1 −1 −1   1 −1   1 −1   1 1   1 −1 1   1 −1   1   1   1 −1 −1 −1   1 −1 −1   1 1 −1

The arrangement disclosed in FIG. 2 is modified as shown in FIG. 12 in order to permit maps to be more easily detected in the presence of short static ghosts. Except for an additional component, the arrangements shown in FIGS. 2 and 12 are the same and, therefore, FIGS. 2 and 12 use the same reference numbers to depict the same components. The arrangement of FIG. 12, however, also includes a scrambler 300 that scrambles the bits in the duplicate map while not scrambling the bits in the original map.

As shown in FIG. 12, the scrambler 300 operates on the output of the Kerdock encoder 12 and supplies its output to the convolutional interleaver 14. Because the scrambler 300 does not scramble the first occurrence of the map, the forty eight bits of the map {A₀ B₀ P₁}, {C₀ A_(e) P₂}, {B_(e) C_(e) P₃} from the Kerdock encoder 12 pass through the scrambler 300 in the sequence in which they leave the Kerdock encoder 12. However, because the scrambler 300 scrambles the duplicate of the map, the forty eight bits of the duplicate map {A₀ B₀ P₁}, {C₀ A_(e) P₂}, {B_(e) C_(e) P₃} from the Kerdock encoder 12 exit the scrambler 300 in a sequence that is different from the sequence that leaves the Kerdock encoder 12.

As indicated above, the Kerdock encoder 12 encodes the maps in groups of two map data sub-units (four bits per map data sub-unit) to produce sixteen output bits per group. These sixteen bits comprise eight bits of the corresponding two map sub-units and eight parity bits. These sixteen bits in sequence may be arbitrarily designated as 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16. Therefore, the first occurrence of the first sixteen bits of a map exits the scrambler 300 in this sequence. However, the second occurrence of these first sixteen bits (i.e., the first sixteen bits of the duplicate map) exits the scrambler 300 in a scrambled sequence. For example, these sixteen bits may exit the scrambler 300 in the following sequence: 13 9 5 1 14 10 6 2 15 11 7 3 16 12 8 4. Accordingly, the first bit in the original map is the fourth bit in the duplicate map, the second bit in the original map is the eighth bit in the duplicate map, and so on. Other alternative scrambling sequences could be used.

Likewise, the first occurrence of the second sixteen bits of the map exits the scrambler 300 in the unscrambled sequence, and the second occurrence of these second sixteen bits (i.e., the second sixteen bits of the duplicate map) exits the scrambler 300 in the scrambled sequence of 13 9 5 1 14 10 6 2 15 11 7 3 16 12 8 4. Similarly, the first occurrence of the third sixteen bits of the map exits the scrambler 300 in the unscrambled sequence, and the second occurrence of these third sixteen bits (i.e., the third sixteen bits of the duplicate map) exits the scrambler 300 in the scrambled sequence of 13 9 5 1 14 10 6 2 15 11 7 3 16 12 8 4.

Therefore, because the original map is not scrambled and the duplicate map is scrambled, the likelihood, in the case of a short static ghost, that the original map and the duplicate map will be superimposed on the same frame sync bits is materially reduced making recovery of the map from the average of the original and duplicate maps much more likely.

The arrangement disclosed in FIG. 4 is likewise modified as shown in FIG. 13 in order to permit the maps to be more easily detected in the presence of short static ghosts. Except for an additional component, the arrangements shown in FIGS. 4 and 13 are the same and, therefore, FIGS. 4 and 13 use the same reference numbers to depict the same components. The arrangement of FIG. 13, however, also includes a de-scrambler 310 that is provided between the convolutional de-interleaver 40 and the averaging circuit 50. The de-scrambler 310 reverses the process of the scrambler 300. Accordingly, the de-scrambler 310 passes the original map bits without de-scrambling and de-scrambles the bits of the duplicate map to reverse the scrambling of the duplicate map imposed by the scrambler 300.

In order to support effective map recovery in the receiver in the presence of burst noise or repeated bursts of noise, a twelve bit map data unit (mdu) is still defined. However, of these twelve bits, ten bits are used to define a map and the remaining two bits form half of a four bit frame count. A first mdu, which may be designated as mdu₀, is denoted as {A₀ B₀ C₀}. This mdu comprises ten bits to define a current map and two of the bits of the four bit frame count. The two frame count bits and the ten bits defining the current map may be distributed in any desired fashion in mdu₀. A second mdu, which may be designated as mdu_(e), is denoted as {A_(e) B_(e) C_(e)}. This mdu comprises ten bits to define a next map and the remaining two of the bits of the four bit frame count. As before, the remaining two frame count bits and the ten bits defining the next map may be distributed in any desired fashion in mdu_(e).

The current map is the map that the receiver uses in determining the location of data in the field of a frame that it is currently receiving, the next map is the map that the receiver will use in determining the location of data in the fields of a future frame, and the frame count indicates the number of frames that the receiver will have to receive before it starts using the next map to determine the location of data in the fields of the future frame. As each field of each frame prior to the future frame is transmitted, the current map and the next map stay the same. However, the frame count is decremented as each of these frames is transmitted. As is known in the art, a frame consists of two fields.

For example, it may be assumed that frame 0 is a first frame to which map_(a) is to be applied as the current map. The transmitter inserts map_(a) into both fields of frame −1, i.e., the frame that is transmitted prior to frame 0. The transmitter also inserts map_(b), which defines the next map, and the frame count 0 into frame −1. Thus, the current map leads the first frame to which it is to be applied by one frame. The receiver recovers map_(a), map_(b), and the frame count 0 from frame −1, and stores the recovered map_(a), map_(b), and the frame count of 0 in a memory. However, the receiver uses a previously received current map to find data in the frame −1.

In preparing frame 0 for transmission, the transmitter inserts into frame 0 the same maps that it inserted into frame −1, i.e., map_(a) and map_(b). However, the frame count that the transmitter inserts into frame 0 is now k. The receiver stores map_(a), and map_(b), and the frame count k that it receives in frame 0. The receiver uses map_(a) to locate data in frame 0.

This process continues such that map_(a) and map_(b) are transmitted in each of the following frames 1, 2, . . . , k−1. The frame count is decremented in each of these frames. When frame k is transmitted, frame k now contains map_(b) as the current map, a new map map_(c) as the next map, and a frame count of 0. Below is a table for a simplified example of the above operation where k=5.

Frame Frame # count Map data . . . . . . . . . −1   0 Current map = map(a, 0) next map = map(b, 6) 0 5 Current map = map(a, 1) next map = map(b, 6) 1 4 Current map = map(a, 2) next map = map(b, 6) 2 3 Current map = map(a, 3) next map = map(b, 6) 3 2 Current map = map(a, 4) next map = map(b, 6) 4 1 Current map = map(a, 5) next map = map(b, 6) 5 0 Current map = map(b, 6) next map = map(c, 12) 6 5 Current map = map(b, 7) next map = map(c, 12) 7 4 Current map = map(b, 8) next map = map(c, 12) 8 3 Current map = map(b, 9) next map = map(c, 12) 9 2 Current map = map(b, 10) next map = map(c, 12) . . . . . . . . .

The frame count is decremented modulo k=5. The map changes every k+1 frames. The notation “map(x,y)” refers to a specific map x that will apply to frame #y. As discussed above, the current map leads the frame to which it is to be applied by one frame. The leading is reflected in the map data of the Table. If the location of VSB data and E-VSB data does not change from frame k−1 to frame k, the current map and the next map simply remain the same.

As indicated above, the receiver maintains its own frame count in its memory and also saves the current map and the next map in the memory. As each frame (comprising two fields) is received, the receiver either stores the frame count in that frame in the memory or decrements the stored frame count by one, as discussed more fully below. Thus, the part of the memory that stores the frame counter may be referred to herein as a count down counter. Therefore, if the portion of one or more fields containing the map and frame count information cannot be properly received because of noise in the channel, the receiver can determine from its own count down counter when to begin using the next map that it has stored in memory.

The transmitter can insert the current map, the next map, and the frame count into any desired segment of a field. Preferably, the transmitter is arranged to insert the current map, the next map, and the frame count into the reserved portion of the field sync segment of a field. Moreover, the transmitter may be arranged to scramble the current map, the next map, and the frame count in the even fields but not in the odd fields. For example, the current map, the next map, and the frame count in the odd field, which is defined as the field having the positive middle PN63 sequence in its field sync segment, are not scrambled. On the other hand, the current map, the next map, and the frame count in the even field, which is defined as the field having the negative middle PN63 sequence in its field sync segment, are scrambled. The transmitter can use the scrambling sequences disclosed above for this scrambling. Also, because the same map and count information are transmitted in the odd and even fields of a frame, this information can be averaged in the receiver as discussed above.

As shown in FIG. 14, a controller 400 generates a sequence of map data units for application to a Kerdock encoder 402. Eight bits at a time are supplied to the Kerdock encoder 402. Thus, the first eight bits supplied to the Kerdock encoder 402 correspond to map data sub-units A₀ B₀, the next eight bits supplied to the Kerdock encoder 402 correspond to map data sub-units C₀ A_(e), and the next eight bits supplied to the Kerdock encoder 402 correspond to map data sub-units B_(e) C_(e). The map data units for succeeding fields are applied to the Kerdock encoder 402 in a like fashion.

For each eight bit input, the Kerdock encoder 402 produces a sixteen bit code word or vector that consists of the eight input bits and eight parity bits P_(x). Accordingly, for input map data sub-units A₀ B₀, the output of the Kerdock encoder 12 is a code word or vector {A₀ B₀ P₁}; for map data sub-units C₀ A_(e), the output of the Kerdock encoder 12 is {C₀ A_(e) P₂}; and, for map data sub-units B_(e) C_(e), the output of the Kerdock encoder 12 is {B_(e) C_(e) P₃}. Thus, three map data sub-units covering the current map, the next map, and the frame count are thereby encoded as three sixteen bit output vectors containing forty-eight bits in all. For these purposes, the Kerdock encoder 402 may use any of the Kerdock encoding techniques described above in connection with FIGS. 6 and 7 or other Kerdock encoding technique.

As shown in FIG. 14, a scrambler 404 operates on the output of the Kerdock encoder 402 and supplies its output to a data field formatter 20. The scrambler 404 scrambles the current map, the next map and the frame count that are inserted in the even field of a frame, and does not scramble the current map, the next map and the frame count that are inserted in the odd field of that frame. Because the scrambler 404 does not scramble the map and frame count data inserted into the odd field, the forty eight bits, i.e., {A₀ B₀ P₁}, {C₀ A_(e) P₂}, and {B_(e) C_(e) P₃}, from the Kerdock encoder 402 corresponding to the map and frame count data for the odd field pass through the scrambler 404 in the sequence in which they leave the Kerdock encoder 402. However, because the scrambler 404 does scramble the map and frame count data inserted into the even field, the forty eight bits, i.e., {A₀ B₀ P₁), {C₀ A_(e) P₂}, and (B_(e) C_(e) P₃}, from the Kerdock encoder 402 corresponding to the map and frame count data for the even field exit the scrambler 404 in a sequence that is different from the sequence that leaves the Kerdock encoder 402. The scrambler 404 may use the scrambling sequence disclosed above.

A VSB data source 406 provides VSB data, and an E-VSB data source 408 provides E-VSB data. The controller 400 controls the VSB data source 406 and the E-VSB data source 408 so as to control the mix of VSB and E-VSB data segments in a field according to its corresponding current map. The data segments supplied by the VSB data source 406 and the E-VSB data source 408, together with the encoded (and possibly scrambled) map and frame count data from the scrambler 404, are applied to a data field formatter 410. The data field formatter 410 is synchronized to the field sync signal from the controller 400 and formats the transmitted field so that the forty-eight encoded (and possibly scrambled) map and frame count bits are inserted into the reserved portion of a field sync segment as described above. Thus, the VSB data source 406 and the E-VSB data source 408 are controlled by the controller 400 so that the VSB and E-VSB data segments supplied by the VSB data source 406 and the E-VSB data source 408 to the data field formatter 410 correspond to the current map of the map and frame count data from the scrambler 404. The data field formatter 410 is synchronized so that these VSB and E-VSB data segments are appropriately multiplexed throughout the current field in accordance with the current map contained in the same field.

Finally, the formatted fields are successively applied to a standard ATSC modulator and transmitter 412 for transmission.

As shown in FIG. 15, the signal transmitted by the ATSC modulator and transmitter 412 is received by a receiver comprising a tuner 420. The IF output of the tuner 420 is demodulated by an ATSC demodulator 422 in order to provide an analog baseband output representing the transmitted symbols. This analog signal is sampled by an A/D converter 424 under control of a digital processor 426 to convert the demodulated symbols into corresponding multibit digital values. The encoded map and frame count data contained in the field just received are applied to a descramler 427 that reverses the scrambling imposed by the scrambler 404. The encoded map and frame count data contained in the field just received are then applied to an averager 428 that, as discussed above, averages the encoded map and frame count data contained in two fields of the same frame. The averaged and encoded map and frame count data are then applied to a Kerdock decoder 430 for decoding. The Kerdock decoder 430 may use any of the Kerdock decoding techniques described above in connection with FIGS. 8 and 9 or other suitable Kerdock decoding technique. As discussed above, the encoded map and frame count data includes the current map, the next map, and the frame count discussed above.

The Kerdock decoder 430 applies the decoded current map and the decoded next map to a memory 438. The current map that is stored in the memory 438 and that applies to the field being received is supplied to a segment de-formatter 432. The segment de-formatter 432 responds to this current map by passing the VSB segments in the field being received to a VSB processor 434 and by passing the E-VSB segments in the field being received to an E-VSB processor 436. The VSB processor 434 and the E-VSB processor 436 decode and otherwise process the respective VSB data and E-VSB data from the segment de-formatter 432.

Moreover, the Kerdock decoder 430 applies the decoded frame count from the field being received to a count down counter 440. As suggested above, the counter down counter 440 may be part of the memory 438. Additionally, the Kerdock decoder 430 applies the reliability factor discussed above to the memory 438 and to the count down counter 440.

If the reliability factor indicates that the map and frame count information contained in the field being received is reliable, the received frame count is stored in the count down counter 440, and the current map and the next map are also stored as discussed above. On the other hand, if the reliability factor indicates that the map and frame count information contained in the field being received is not reliable because, for example, the field being received has been corrupted by noise, two actions are taken. First, the count in the count down counter 440 is decremented modulo k (once per frame) based on frame sync signal timing. Second, the old current map and the old next map are retained in the memory 438, unless the counter down counter 440 is decremented to zero. In that case, the current map, which is stored in the memory 438 and which is to be applied to the next received frame, is set to the stored next map, and the next map is left as is.

In this way, the count down counter 440 can keep track of when the next map stored in the memory 438 should be used as the current map. Thus, if the map and the frame count information is not properly received in one or more fields around the transition from current map use to next map use, the receiver, prompted by the count down counter 440, can simply use the next map that is stored in the memory 438. In the example of table above, if the map and frame count information are not adequately received in the fields of frames 4 and 5, the receiver can simply use map (b,6) that is stored in the memory 438 to locate the various data in the fields of frame 6.

In this way, the present invention is able to withstand burst noise without the use of interleaving and de-interleaving. Moreover, the present invention is able to withstand repeated bursts of noise.

As described above, an unscrambled version of the current map, the next map, and the frame count k are inserted into the odd field of a frame, and the scrambled version of the same current map, the same next map, and the same frame count k are inserted into the even field of the same frame. Then, an unscrambled version of the same current map, the same next map, and the frame count k−1 are inserted into the odd field of the next frame, and the scrambled version of the same current map, the same next map, and the same frame count k−1 are inserted into the even field of the same next frame. For each field, the map and count information is encoded by the Kerdock encoder 402 prior to supply to the scrambler 404. The Kerdock encoder 402, as described above, may be referred to as a 16/8 encoder because it provides a 16 bit encoded output based on an 8 bit input. Similarly, the Kerdock decoder 430, as described above, may be referred to as a 16/8 decoder because it provides an 8 bit decoded output based on a 16 bit input.

The Kerdock encoder 402 may instead be a 64/12 encoder, and the Kerdock decoder 430 may instead be a 64/12 decoder. Thus, a non-systematic Kerdock encoder 450 in the form of a 64/12 encoder is shown in FIG. 16 and may be used for the Kerdock encoder 402. The non-systematic Kerdock encoder 450 accepts an input having 12 bits, such as the map data sub-units A₀, B₀, and C₀ having a total of twelve bits, and outputs a corresponding code word having 64 bits by reading out an appropriate 64 bit code word from a look-up table 452.

The look up table 452 stores 4096 Kerdock code vectors each having a length of 64. That is, each of these Kerdock code vectors comprises 64 bits. There are 2⁶⁴ different code vectors having a length of 64.

However, only 2¹² or 4096 of these 2⁶⁴ different code vectors satisfy the requirements for being a Kerdock code vector. These Kerdock vectors are described in “The Z₄-linearity of Kerdock, Preparata, Goethals, and Related Codes,” by A. Roger Hammons, Jr., P. Vijay Cumar, A. R. Calderbank, N.J. A. Sloane, and Patrick Sole, IEEE Transactions on Information Theory, vol. 40, #2, pp 301–319, March, 1994. Thus, each different combination of the twelve input bits can be used as a unique address into the look up table 452 in order to uniquely select a corresponding one of the 4096 Kerdock code vectors.

When the Kerdock encoder 450 is used as the Kerdock encoder 402 of FIG. 14, the controller 400 supplies two groups of twelve bits per frame to the Kerdock encoder 450. The first group contains the current map and the first two of the four bits that comprise the frame count. The Kerdock encoder 450 uses these twelve bits in the first group as an address into the look up table 452 in order to output a corresponding 64 bit Kerdock Code vector. The date field formatter inserts this 64 bit Kerdock code vector into the odd field of a frame.

The second group contains the next map and the second two of the four bits that comprise the frame count. The Kerdock encoder 450 uses these twelve bits in the second group as an address into the look up table 452 in order to output a corresponding 64 bit Kerdock Code vector. The date field formatter inserts this 64 bit Kerdock code vector into the even field of a frame.

Thus, when a 16/8 Kerdock encoder is used, the current map, the next map, and the entire frame count can be encoded as three 16 bit Kerdock code vectors for insertion into the reserved portion of the field sync segment of a single field. However, when a 64/12 Kerdock encoder is used, the current map, the next map, and the entire frame count are encoded as two 64 bit Kerdock code vectors. Because the reserved portion of the field sync segment of a single field contains insufficient space to hold both of these Kerdock code vectors, the first of these Kerdock code vectors (representing the current map and the first two frame count bits) is inserted into the odd field of a frame, and the second of these Kerdock code vectors (representing the next map and the second two frame count bits) is inserted into the even field of the frame.

Therefore unlike the 16/8 Kerdock encoder case where the current map, the next map, and the frame count are transmitted twice, once in the odd field of a frame and once in the even field of the frame, the current map, the next map, and the frame count are transmitted only once in the case of the 64/12 Kerdock encoder case where both fields of a frame are required to contain this map and frame count information. Accordingly, no portion of the map and frame information is scrambled when a 64/12 Kerdock encoder is used. However, scrambling is not really necessary when two 64 bit Kerdock code vectors are required to transmit the map and frame count information because of the additional robustness obtained by the additional length of the code vectors. Therefore, when the Kerdock encoder 402 is a 64/12 Kerdock encoder, the scrambler 404 may be eliminated.

Also, this additional robustness means that the descrambler 427 and the averager 428 may be eliminated. The descrambler 427 is not necessary when the scrambler 404 is not used. Implementation of the averager 428 becomes more awkward because the map and frame count information is transmitted only once when a 64/12 Kerdock encoder is used. While it might be possible to average only the map information from two succeeding frames because only the frame count typically changes from frame to frame (unless the frame count has expired), the additional robustness obtained from the use of longer Kerdock code vectors makes averaging unnecessary.

A non-systematic Kerdock decoder 454 is shown in FIG. 17 and may be used for the Kerdock decoder 430. The non-systematic Kerdock decoder 454 accepts an input having 64 bits and outputs a vector of 12 bits that may contain two of the four bits of the frame count in addition to either the current map or the next map.

More specifically, a correlator 456 correlates the 64 input bits with each of 4096 Kerdock code words stored in a look-up table 458. These Kerdock code words may be the same Kerdock code words stored in the look up table 452. The correlation implemented by the correlator 456, for example, may be a dot product of the input 64 bits and each of the Kerdock code words stored in the look-up table 458.

Thus, the first bit of the 64 input bits is multiplied by the first bit of a first Kerdock code word stored in the look-up table 458 to form a first product, the second bit of the 64 input bits is multiplied by the second bit of the first Kerdock code word stored in the look-up table 86 to form a second product, . . . , and the sixty-forth bit of the 64 input bits is multiplied by the sixty-forth bit of the first Kerdock code word stored in the look-up table 86 to form a sixty-forth product. The resulting sixty-four products are added to form a first correlation between the 64 input bits and the first Kerdock code word stored in the look-up table 458. This process is repeated for each of the other 4095 Kerdock code words stored in the look-up table 458.

An identifier 460 identifies the Kerdock code word from the look-up table 458 that produces the largest correlation, and outputs the twelve bits that correspond to this Kerdock code word as the twelve output bits making up either the current and two of the frame count bits or the next map and the other two frame count bits. The identifier 460 may also form the difference between the largest correlation and the next largest correlation as a reliability factor that indicates the reliability with which the 64 input bits have been decoded.

It is possible to given a particular frame count in the transmitted frames a specialized meaning. For example, a frame count of 1111 can be used to indicate to the receiver that the current map and the next map are the same.

In the context of the embodiment described above with respect to FIGS. 16 and 17, a static ghost can make properly receiving and decoding the map information difficult, if not impossible. The embodiment of the invention described below in relation to FIGS. 18 and 19 facilitates the proper receiving and decoding of the map information even in the presence of a static ghost.

As shown in FIG. 18, a non-systematic Kerdock encoder 470 in the form of a 64/12 encoder may be-used for the Kerdock encoder 402. The non-systematic Kerdock encoder 470, as before, accepts an input having 12 bits, such as the map data sub-units A₀, B₀, and C₀ having a total of twelve bits, and outputs a corresponding code word having 64 bits by reading out an appropriate 64 bit code word from a look-up table 472.

Also as before, when the Kerdock encoder 470 is used as the Kerdock encoder 402 of FIG. 14, the controller 400 supplies two groups of twelve bits per frame to the Kerdock encoder 470. The first group contains the current map and the first two of the four bits that comprise the frame count. The Kerdock encoder 470 uses these twelve bits in the first group as an address into the look up table 472 in order to output a corresponding 64 bit Kerdock code vector. The data field formatter inserts this 64 bit Kerdock code vector into the odd field of a frame.

The second group contains the next map and the second two of the four bits that comprise the frame count. The Kerdock encoder 470 uses these twelve bits in the second group as an address into the look up table 472 in order to output a corresponding 64 bit Kerdock code vector. The data field formatter inserts this 64 bit Kerdock code vector into the even field of a frame.

The 64 bit Kerdock code vectors read from the look up table 472 are supplied to an inverter 474 and also to a first contact 476 of a switch 478. The output of the inverter 474 is supplied to a second contact 480 of the switch 478. The switch 478 has a movable contact 482 that is controlled by the controller 400 (see dashed line). When the 64 bit Kerdock code vector that is to be inserted into the odd field of a frame is read out of the look up table 472, the switch 478 is controlled by the controller 400 so that the first contact 476 and the movable contact 482 engage and the inverter 474 is bypassed. Therefore, this 64 bit Kerdock code vector is inserted into the odd field of a frame as a non-inverted 64 bit Kerdock code vector.

However, when the 64 bit Kerdock code vector that is to be inserted into the even field of a frame is read out of the look up table 472, the switch 478 is controlled by the controller 400 so that the second contact 480 and the movable contact 482 engage and the inverter 474 is not bypassed. Therefore, this 64 bit Kerdock code vector is inserted into the even field of a frame as an inverted 64 bit Kerdock code vector. This process continues so that odd field 64 bit Kerdock code vectors are non-inverted and the even field 64 bit Kerdock code vectors are inverted.

A non-systematic Kerdock decoder 490 is shown in FIG. 19 and may be used for the Kerdock decoder 430. The non-systematic Kerdock decoder 490 accepts an input having 64 bits and outputs a vector of 12 bits that contains two of the four bits of the frame count in addition to ten bits of map information.

More specifically, a received 64 bit Kerdock code vector is provided both to an inverter 492 and to a first contact 494 of a switch 496. The output of the inverter 492 is coupled to a second contact 498 of the switch 496. The switch 496 has a movable contact 500 that is coupled to a combiner 502.

When the 64 bit Kerdock code vector in the odd field of a frame is received, the switch 496 is controlled by the digital processor 38 (see dashed line) so that the first contact 494 and the movable contact 500 engage and the inverter 492 is bypassed. Therefore, this 64 bit Kerdock code vector is passed directly to the combiner 502, which holds this odd field 64 bit Kerdock code vector until the even field 64 bit Kerdock code vector is received. The combiner 502 is controlled by the digital processor 38 (see dashed line).

When the 64 bit Kerdock code vector in the even field of a frame is received, the switch 496 is controlled by the digital processor 38 so that the second contact 498 and the movable contact 500 engage and the inverter 492 is not bypassed. Therefore, this even field 64 bit Kerdock code vector, which had been inverter by the inverter 474 in the transmitter, is re-inverted by the inverter 492 back to its original state.

The combiner 502 performs a bit wise addition of the re-inverted even field 64 bit Kerdock code vector and the odd field 64 bit Kerdock code vector that it previously held. The combiner 502 supplies the combined 64 bit Kerdock vector to a correlator 504. This process continues so that corresponding pairs of odd field 64 bit Kerdock code vectors and re-inverted even field 64 bit Kerdock code vectors are likewise combined into a corresponding combined 64 bit Kerdock code vector that is supplied by the combiner 502 to the correlator 504.

The correlator 504 correlates the combined 64 bit Kerdock code vector from the combiner 502 with each of 4096 Kerdock code words stored in a look-up table 508. These Kerdock code words may be the same Kerdock code words stored in the look up table 472. The correlation implemented by the correlator 504 for example, may be a dot product of the input 64 bits and each of the Kerdock code words stored in the look-up table 506.

In the case where the current map transmitted as the odd field 64 bit Kerdock vector and the next map transmitted as the even field 64 bit Kerdock vector are the same, the correlator 504 produces a single, large peak correlation. An identifier 508 identifies the Kerdock code word from the look-up table 506 that produces this single, large correlation peak, and outputs the twelve bits that correspond to this Kerdock code word as the twelve output bits that make up both the current map and the next map.

In the case where the current map transmitted as the odd field 64 bit Kerdock vector and the next map transmitted as the even field 64 bit Kerdock vector are not the same, the correlator 504 produces two smaller correlation peaks. Because these two smaller but still relatively large correlation peaks result from the correlation process, the digital processor 38 (see dashed line to the correlator 504) can determine that the current map and the next map are not the same. In this event, the digital processor 38 can ignore the correlation result and instead use a map that had previously been stored in a memory 510 (see dashed line).

If a ghost of static data is received at the time both the current map and the next map are received, the ghost received during the current map is not inverted, but the ghost received during the next map is inverted by the inverter 492. Accordingly, when the combiner 502 combines the Kerdock code vectors representing the current map and the inverted next map, the ghosts cancel. In this manner, the map information is properly received and decoded even in the presence of a static ghost.

Certain modifications of the present invention have been discussed above. Other modifications will occur to those practicing in the art of the present invention. For example, the blocks that have been described above in relation to the various drawing figures described herein may be hardware blocks, software modules, logic arrays, etc. Moreover, the arrangements shown in these drawing figures may be implemented as separate blocks as shown, or the blocks may be combined or divided as desired without departing from the scope of the invention.

Also, as disclosed above, the convolutional interleaver 14 and de-interleaver 40 are preferably characterized by the parameters N=48, B=16 and M=3. However, the convolutional interleaver 14 and de-interleaver 40 may be characterized by the other values for the parameters N, B, and M.

As described above, the map as originally transmitted is not scrambled and the duplicate of the map is scrambled. Instead, the map as originally transmitted may be scrambled, in which case the duplicate of the map is not scrambled. Moreover, it is possible to scramble both the map and its duplicate according to different scrambling sequences.

Moreover, the map and its duplicate can be combined in ways other than averaging. For example, the map and its duplicate may simply be added. Alternatively, if a receiver has a ghost detector, then the map and its duplicate do not have to be combined in the case where the ghost detector does not detect a short static ghost. Instead, the better of the two maps can be selected in order to separate the data in a data frame.

Furthermore, as described above, the transmitter of FIG. 14 does not change the current map or the next map in the fields of the frame whose frame count is 0 and, instead, makes the map change in frame k+1 whose frame count is reset to k (or other number). Thus, in frame k+1, the previous next map becomes the current map, and a new map is used as the next map. This map change, however, can be made in the frame following the frame whose frame count is 1 or any other frame. Thus, the frame count that triggers the map change is arbitrary.

Additionally, it is noted that four bits are used to specify the frame count, and that the value of k is thereby limited. However, the map change described above can be delayed by a number of frames greater than k. Indeed, the same current map and next map combination may be inserted into any number of frames greater than k by simply not decrementing k or not decrementing k completely until dk frames later, where d is any number greater than 1. Accordingly, any one or more values of k greater than 0 (or other switch number) can simply be repeated a desired number of times.

Also, in connection with at least the invention of FIGS. 14–17, encoders and decoders using coding and decoding techniques other than Kerdock encoding and decoding may be used in place of the Kerdock encoder 402 and the Kerdock decoder 43.

Additionally, as described above, interleaving and de-interleaving need not be employed in connection with the invention disclosed with respect to FIGS. 14–17. Nevertheless, interleaving and de-interleaving may be employed in connection with the invention disclosed with respect to FIGS. 14–17. Such interleaving and de-interleaving can provide additional protection against burst noise.

Moreover, as indicated above, a field may contain E-VSB data coded using different coding rates. In this case, the map must additionally designate the various coding rates that apply to the differently coded E-VSB data segments.

Furthermore, as indicated above with respect to FIGS. 18 and 19, an inverter in a transmitter inverts the 64 bit Kerdock code vector to be inserted into the even field and does not invert the 64 bit Kerdock code vector to be inserted into the odd field. Alternatively, the inverter in the transmitter could instead inverts the 64 bit Kerdock code vector to be inserted into the odd field and not invert the 64 bit Kerdock code vector to be inserted into the even field. In this case, the inverter in the receiver inverts the received odd field 64 bit Kerdock code vector and does not invert the received even field 64 bit Kerdock code vector.

Also, the Kerdock code vectors that are combined by the combiner 502 may be transmitted and received in different fields of the same frame or in the fields of different frames. For example, the combiner 502 may be arranged to combine the even field 64 bit Kerdock code vector from one frame and the odd field 64 bit Kerdock code vector from an adjacent frame.

Moreover, the switches 478 and 496 have been shown in FIGS. 18 and 19 as mechanical switches for ease of understanding. However, it should be understood that these switches may be of any type such as electronic switches.

Accordingly, the description of the present invention is to be construed as illustrative only and is for the purpose of teaching those skilled in the art the best mode of carrying out the invention. The details may be varied substantially without departing from the spirit of the invention, and the exclusive use of all modifications which are within the scope of the appended claims is reserved. 

1. A data receiving method comprising: receiving current and next maps in respective successive fields of an ATSC compliant signal, wherein the current map indicates location of differently coded first and second data segments in a current field and the next map indicates location of differently coded first and second data segments in a subsequent field; inverting only one of the current and next maps to produce an inverted map and a non-inverted map; and, locating the first and second data segments in the current field according to at least one of the inverted map and the non-inverted map.
 2. The data receiving method of claim 1 wherein the received current and next maps are in the form of corresponding Kerdock code vectors.
 3. The data receiving method of claim 2 wherein the Kerdock code vectors each comprises a 64 bit Kerdock code vector representing 12 bits of data.
 4. The data receiving method of claim 3 wherein the 12 bits comprises at least some bits that represent a count down.
 5. The data receiving method of claim 3 wherein the 12 bits represented by the Kerdock code vector corresponding to the current map comprises a portion of a count down, and wherein the 12 bits represented by the Kerdock code vector corresponding to the next map comprises the remainder of the count down.
 6. The data receiving method of claim 1 wherein the inverting of only one of the current and next maps comprises inverting only the next map, and wherein the locating of the first and second data segments in the current field comprises locating the first and second data segments in the current field according to the non-inverted current map.
 7. The data receiving method of claim 1 wherein a symbol in the first data segments of the current field represents a different number of bits than a symbol in the second data segments of the current field, and wherein a symbol in the first data segments of the subsequent field represents a different number of bits than a symbol in the second data segments of the subsequent field.
 8. The data receiving method of claim 7 wherein the inverting of only one of the current and next maps comprises inverting only the next map, and wherein the locating of the first and second data segments in the current field comprises locating the first and second data segments in the current field according to the non-inverted current map.
 9. The data receiving method of claim 1 wherein the current map is received in an odd field of a frame, wherein the next map is received in an even field of the frame, wherein the inverting of only one of the current and next maps comprises inverting only the next map, and wherein the locating of the first and second data segments in the current field comprises locating the first and second data segments in the current field according to the non-inverted current map.
 10. The data receiving method of claim 9 wherein a symbol in the first data segments of the current field represents a different number of bits than a symbol in the second data segments of the current field, and wherein a symbol in the first data segments of the subsequent field represents a different number of bits than a symbol in the second data segments of the subsequent field.
 11. The data receiving method of claim 1 wherein the current map includes count information, wherein the next map includes count information, and wherein the count information indicates a future frame in which the current map changes to the next map.
 12. The data receiving method of claim 11 wherein the inverting of only one of the current and next maps comprises inverting only the next map, and wherein the locating of the first and second data segments in the current field comprises locating the first and second data segments in the current field according to the non-inverted current map.
 13. The data receiving method of claim 11 wherein a symbol in the first data segments of the current field represents a different number of bits than a symbol in the second data segments of the current field, and wherein a symbol in the first data segments of the subsequent field represents a different number of bits than a symbol in the second data segments of the subsequent field.
 14. The data receiving method of claim 13 wherein the inverting of only one of the current and next maps comprises inverting only the next map, and wherein the locating of the first and second data segments in the current field comprises locating the first and second data segments in the current field according to the non-inverted current map.
 15. The data receiving method of claim 11 wherein the current map is received in an odd field of a frame, wherein the next map is received in an even field of the frame, wherein the inverting of only one of the current and next maps comprises inverting only the next map, and wherein the locating of the first and second data segments in the current field comprises locating the first and second data segments in the current field according to the non-inverted current map.
 16. The data receiving method of claim 15 wherein a symbol in the first data segments of the current field represents a different number of bits than a symbol in the second data segments of the current field, and wherein a symbol in the first data segments of the subsequent field represents a different number of bits than a symbol in the second data segments of the subsequent field.
 17. A data receiving method comprising: receiving a signal comprising successive frames, wherein each frame comprises a first field of first and second differently coded data segments and a second field of first and second differently coded data segments, wherein each first field contains a current map indicating the location of the first and second differently coded data segments in a first field and a first partial count, wherein each second field contains a next map indicating the location of the first and second differently coded data segments in a second field and a second partial count, and wherein the first and second partial counts comprise a count indicating the number of frames in which the current map contained within a given frame changes to the next map contained in the same frame; combining the first and second partial counts to produce a count value representing the count; inverting each of the received next maps to produce corresponding inverted next maps; and, using one or more of the received current maps, the inverted next maps, and the count values to determine the location of the first and second differently coded data segments in the received signal.
 18. The data receiving method of claim 17 wherein the received current and next maps are in the form of corresponding Kerdock code vectors.
 19. The data receiving method of claim 18 wherein the Kerdock code vectors each comprises a 64 bit Kerdock code vector representing 12 bits of data.
 20. The data receiving method of claim 19 wherein the 12 bits comprises at least some bits that represent a corresponding one of the first and second partial counts.
 21. The data receiving method of claim 19 wherein the 12 bits represented by the Kerdock code vector corresponding to the current map comprises the first partial count, and wherein the 12 bits represented by the Kerdock code vector corresponding to the next map comprises the second partial count.
 22. The data receiving method of claim 17 wherein a symbol in the first data segments of the first field represents a different number of bits than a symbol in the second data segments of the first field, and wherein a symbol in the first data segments of the second nd field represents a different number of bits than a symbol in the second data segments of the second field.
 23. The data receiving method of claim 17 wherein the current maps are received in odd fields of the frames, and wherein the next maps are received in even fields of the frames.
 24. The data receiving method of claim 23 wherein a symbol in the first data segments of the first field represents a different number of bits than a symbol in the second data segments of the first field, and wherein a symbol in the first data segments of the second field represents a different number of bits than a symbol in the second data segments of the second field. 